4 releases (1 stable)

1.0.0 Jun 17, 2022
0.2.0 May 26, 2022
0.1.5 Dec 12, 2021
0.1.4 Dec 12, 2021

#748 in Science

MIT license

41KB
96 lines

PyPI PyPI Python Rust

Fast Konno-Ohmachi Spectral Smoothing

Implemented in Rust with a Python interface. The performance gain measured against the widely used Python/numpy implementation that comes with obspy approaches approximately a factor of 2.5 for large and 10 for small vectors (see Benchmarks).

konno-ohmachi demo

Installation

Installation from pypi:

pip install konnoohmachi

Installation from source:

pip install .

Usage

This smoothes some random numbers:

Python

import konnoohmachi

bandwidth = 40

# using fake random data
frequencies = np.arange(1000)
amplitudes = np.random.rand(1000)

smoothed_amplitudes = konnoohmachi.smooth(frequencies, amplitudes, bandwidth)

Rust

use konnoohmachi;

let frequencies = Array1::<f64>::zeros(10);
let amplitudes = Array1::<f64>::ones(10);
let bandwidth = 40.0;
konnoohmachi_smooth(
    frequencies.view().into_dyn(),
    amplitudes.view().into_dyn(),
    bandwidth,
);

Benchmarks

Measuring the execution time based of increasing sized spectra yields:

❯ python3 benchmark.py
nsamples |    Rust      |    Python     | Performance Gain
----------------------------------------------------------
256      |    0.00017   |    0.00192    |   11.30802
512      |    0.00054   |    0.00431    |    7.97596
1024     |    0.00198   |    0.01117    |    5.63623
2048     |    0.00775   |    0.03143    |    4.05371
4096     |    0.03067   |    0.10024    |    3.26844
8192     |    0.12212   |    0.35058    |    2.87080
16384    |    0.49391   |    1.29653    |    2.62506
32768    |    1.98499   |    5.05335    |    2.54578

Dependencies

~4MB
~77K SLoC