Skip to main content

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.

Files for sdmlib, version 0.0.2
Filename, size File type Python version Upload date Hashes
Filename, size sdmlib-0.0.2-py3-none-any.whl (4.0 kB) File type Wheel Python version py3 Upload date Hashes View hashes
Filename, size sdmlib-0.0.2.tar.gz (2.6 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page