Sparse Distributed Memory for Python
What is this?
This is a fast implementation of Pentti Kanerva's Sparse Distributed Memory (SDM). sdmlib
is written in Python using numpy
.
Installation
The package is available through PyPi:
pip install sdmlib
sdmlib
Using sdmlib
is designed to operate on numpy
arrays.
Memory
class
The This class provides the main functionality of SDM.
Parameter | Description |
---|---|
N |
Length of addresses in bits |
M |
Number of hard addresses |
U |
Length of data in bits |
d |
Hamming radius of addresses considered "near" for reading and writing. If None , then it is computed using T |
T |
(Default: None ) Number of data points to be written. Ignored if d is provided. If T is None then d must be provided. d and T cannot both be None
|
seed |
Seed the random number generator (for reproducability) |
Example Usage
import numpy as np
from sdmlib import Memory
N = 256
M = 1000
U = 256
T = 100
addresses = np.random.randint(low=0, high=2, size=(T, N), dtype=np.uint8)
data = np.random.randint(low=0, high=2, size=(T, U), dtype=np.uint8)
mem = Memory(N=N, M=M, U=U, d=None, T=T)
for t in range(T):
mem.write(addresses[t], data[t])
error = 0
for t in range(T):
error += np.mean(data[t] != mem.read(addresses[t]))/T
print(f'Reconstruction error: {100*error:.2f}%')
Reconstruction error: 0.51%
write
method
The Write a binary string to memory.
Parameter | Description |
---|---|
x |
Address. Binary numpy array of shape (N,)
|
w |
Data. Binary numpy array of shape (U,)
|
read
method
The Read a binary string from memory.
Parameter | Description |
---|---|
x |
Address. Binary numpy array of shape (N,)
|
Returns | Description |
---|---|
z |
Data. Binary numpy array of shape (U,)
|