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.

Source Distribution

sdmlib-0.1.2.tar.gz (2.6 kB view details)

Uploaded Source

Built Distribution

sdmlib-0.1.2-py3-none-any.whl (4.0 kB view details)

Uploaded Python 3

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

Hashes for sdmlib-0.1.2.tar.gz
Algorithm Hash digest
SHA256 d5ebc5c85d7965a6b9a7e76188b1a63326a748ca17df2cbebf1bd5e423da2300
MD5 4d99b79a8a56c7f7a26237869019e060
BLAKE2b-256 b345eb609d5a13c57c0e8a6502617c10a8efb63852ea352833a61c1f2b9ffa7e

See more details on using hashes here.

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

Hashes for sdmlib-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 a933f95ff730ccd8c611aba6dc77b57866ce0490c2fe8fac6f18b270994a57ee
MD5 a7b26ab156a59b86ce3fd1e6715f0499
BLAKE2b-256 289c4121abdcb5725bdf00f46c7fdbd60d296c84663fa9aa3c46cce175c7abc0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page