A Python module implemented in Rust for efficient calculations
Project description
Rust Functions for Metric Space Analysis
This repository contains a set of functions implemented in Rust for the purpose of metric space analysis. These functions aim to provide superior performance by taking advantage of Rust's efficient memory management and computational capabilities.
- Nature and precision of temporal coding in visual cortex: a metric-space analysis. Victor & Purpura (1996)
- Metric space analysis of spike trains: theory, algorithms and application. Victor & Purpura (1997)
For a full walkthrough of cost-based metrics, see Jonathon Victor's website:
Installation
This package is bundled with the metricspace repository. It can also be installed separately using the following command:
pip install rs-distances
Note: Be sure to activate your virtual environment with Python 3.7 or higher before installing this package via pip.
Performance
The functions provided in this package are written in Rust and compiled into a shared library that can be utilized within Python. This approach is intended to boost the computational efficiency of metric space analysis operations.
Below is a comparative performance table of the spike-train iterator function implemented in Matlab, Python, and Rust. It should be noted that the Matlab version is not optimized using MEX (which would be comparable to Python's numba @jit), and the translations from Matlab to Python to Rust are not exact 1:1.
Spike-train iterator | Matlab | Python | Rust |
---|---|---|---|
raw function |
30.235s | 64.992s | 2.028s |
with numba @jit |
30.235s | 25.119s | 2.028s |
with @jit + parralel |
24.050s | 18.067s | 0.945s |
Advantages of Rust Implementation
Array manipulations, particularly those performed within computationally intensive tasks, are highly sensitive to memory allocation and cleanup. Rust, with its ownership model and automatic memory management, excels in this area. Rust automatically reclaims the memory when an object (like an array or a slice) goes out of scope. This is a stark contrast to languages like Python, where a garbage collector is relied upon to perform memory cleanup. This difference provides Rust implementations with a distinct edge in performance, which is reflected in the comparative analysis shown above.
With these Rust implementations, you can achieve the high-level expressiveness of Python while benefiting from the superior performance and efficiency of Rust.
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
File details
Details for the file rs_distances-1.0.0.tar.gz
.
File metadata
- Download URL: rs_distances-1.0.0.tar.gz
- Upload date:
- Size: 25.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.0.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | de227a7994a41b5f5471bab00c6b1d7d6cc3f301cbad08c162a614f288dc1b06 |
|
MD5 | ba12aa925ddc9716458cc683bef5f6bd |
|
BLAKE2b-256 | f738143cadbaaa5492424a57327bd4af09ffc166cceb679d209c46992c18ca62 |
File details
Details for the file rs_distances-1.0.0-cp310-none-win_amd64.whl
.
File metadata
- Download URL: rs_distances-1.0.0-cp310-none-win_amd64.whl
- Upload date:
- Size: 163.3 kB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.0.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 53c893c885fa17791408042bd3e5830a7cd8debf61b499143d2873abc6f0e2fa |
|
MD5 | eb961ae877d6a1e78671c33e2c3dc5ba |
|
BLAKE2b-256 | b5d4fdd5cbbded7b10928a01e17f16642f41a0702af4c94768458751c86adc45 |