A fast, numpy-based implementation of Kanerva's Sparse Distributed Memory (SDM)
Project description
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
Using sdmlib
sdmlib is designed to operate on numpy arrays.
The Memory class
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%
The write method
Write a binary string to memory.
| Parameter | Description |
|---|---|
x |
Address. Binary numpy array of shape (N,) |
w |
Data. Binary numpy array of shape (U,) |
The read method
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,) |
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sdmlib-0.1.2.tar.gz.
File metadata
- Download URL: sdmlib-0.1.2.tar.gz
- Upload date:
- Size: 2.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.41.1 CPython/3.7.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d5ebc5c85d7965a6b9a7e76188b1a63326a748ca17df2cbebf1bd5e423da2300
|
|
| MD5 |
4d99b79a8a56c7f7a26237869019e060
|
|
| BLAKE2b-256 |
b345eb609d5a13c57c0e8a6502617c10a8efb63852ea352833a61c1f2b9ffa7e
|
File details
Details for the file sdmlib-0.1.2-py3-none-any.whl.
File metadata
- Download URL: sdmlib-0.1.2-py3-none-any.whl
- Upload date:
- Size: 4.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.41.1 CPython/3.7.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a933f95ff730ccd8c611aba6dc77b57866ce0490c2fe8fac6f18b270994a57ee
|
|
| MD5 |
a7b26ab156a59b86ce3fd1e6715f0499
|
|
| BLAKE2b-256 |
289c4121abdcb5725bdf00f46c7fdbd60d296c84663fa9aa3c46cce175c7abc0
|