Fast approximate math functions: log, exp, sin, cos
Project description
approxmath is a Python library of fast, approximate math functions for operations on NumPy arrays. On average it is 4-5x faster than NumPy and has drop-in replacement functions for log, exp, cos, and sin.
The approximations were originally made by Jacques-Henri Jourdan and are explained on Cambium’s blog.
Performance & Accuracy
If your program doesn’t depend on the full precision of floating point operations, the performance-accuracy trade-off will probably be worth it, increasing FLOPS throughput 4-5x. However, in some instances numerical instability will result: for example, approxmath.log(1.0) is nearly, but not exactly 0.0.
Function |
Relative Accuracy |
ops / second |
---|---|---|
exp |
3e-9 |
647 M/sec |
log |
5e-9 |
896 M/sec |
cos |
2e-10 |
470 M/sec |
sin |
2e-9 |
463 M/sec |
Benchmarks were run on a 2019 MacBook Pro (1.4 GHz Quad-Core Intel Core i5), with Python 3.9.9 and NumPy 1.21.4.
Drop-in Replacement for NumPy
import approxmath.np as npa
import numpy as np
npa.sin(np.array([-np.pi/2, 0.0, np.pi/2]))
# array([-1., 0., 1.])
npa.log(np.array([1.0, np.e, np.e**2]))
# array([4.53119942e-09, 1.00000000e+00, 2.00000000e+00])
npa.cos(np.array([-2*np.pi/3, 0.0, 2*np.pi/3]))
# array([-0.5, 1. , -0.5])
npa.exp(np.array([-1., 0., 1.]))
# array([0.36787944, 1. , 2.71828183])
Drop-in Replacement for Aesara Tensor
import approxmath.aesara as att
import aesara.tensor as tt
Functional equivalents:
Aesara |
Approxmath |
Relative Speed-Up |
---|---|---|
tt.exp |
att.exp |
15x |
tt.log |
att.log |
15x |
tt.cos |
att.cos |
13x |
tt.sin |
att.sin |
13x |
Installation
$ pip install approxmath
approxmath is released under the MIT license.
Project details
Release history Release notifications | RSS feed
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 approxmath-2.0.0.tar.gz
.
File metadata
- Download URL: approxmath-2.0.0.tar.gz
- Upload date:
- Size: 5.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9aa8fe3b5aa62938a95c35a7b2897b0a56d4f60af0fcfed492e28f78fef19a99 |
|
MD5 | ea1646593ce64ede7aad8d16e197b1b7 |
|
BLAKE2b-256 | 965ef2ac2595876f166ff73e129bdff941de0e3e73c37d3bd399a16ec3fa4172 |
File details
Details for the file approxmath-2.0.0-py3.9-macosx-10.15-x86_64.egg
.
File metadata
- Download URL: approxmath-2.0.0-py3.9-macosx-10.15-x86_64.egg
- Upload date:
- Size: 11.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7d384fd6da17bb320231c289db6c5ef03c9ce3b1ec9bc77a8096339fa5a4f93e |
|
MD5 | 89a4b9a7474b45288d32491bd14a0e99 |
|
BLAKE2b-256 | d00df29cbbf1d769f53cabb30821287be6c19ae0ffdace193678471f850e37eb |