使用 Eigen 在 C++ 中实现的用于 python 的快速 nnls 求解器
项目描述
fnnls特征
fnnlsEigen 实现了快速非负约束最小二乘算法(fnnls,链接到文章)。该算法使用 Eigen ( Link ) 在 C++ 中实现,并且可以使用 Cython 接口从 Python 调用。
nnls 和 fnnls 算法
非负最小二乘算法解决了给定矩阵Z和向量的以下问题x:
哪里d是解向量。
这个存储库中的 fnnls 算法针对中间稀疏矩阵进行了优化,并且比 SciPy 的大型矩阵的 nnls 算法快得多。
安装
$ python3 -m pip install fnnlsEigen
API
直接使用
fnnls 求解器同时接受np.float32和np.float64精度;dtype通过fnnls和fnnlsf分别。
>>> import numpy as np
>>> import fnnlsEigen as fe
>>> Z = np.array([[1.0, 0.0], [0.0, 1.0], [0.5, 0.5]], dtype=np.float64)
>>> x = np.array([1.0, 1.0, 0.0], dtype=np.float64)
>>> d = fe.fnnls(Z, x)
>>> d
array([0.66666667, 0.66666667])
可选地,可以调整破坏容差 ( tolerance) 和最大迭代次数 ( max_iterations)。
max_iterations : int
Defaults to 3 * array_Z.shape[1].
tolerance : float32 / float64
Defaults to machine epsilon of float32 / float64 times #columns in the given matrix.
批量使用
在对求解器的调用之间,提供的矩阵是否应该Z变化很小或根本没有变化;Z.transpose() * Z由于该产品价格昂贵,因此可以通过缓存产品来提高性能。提供了两个类(float32 / float64)以启用
Z.transpose() * Z产品的内存映射:
CachePreComputeNNLS
>>> import numpy as np
>>> import fnnlsEigen as fe
>>> pc = fe.CachePreComputeNNLS()
>>> Z = np.abs(np.random.rand(500, 1000))
>>> for _ in range(0, 100):
>>> x = np.abs(np.random.rand(500))
>>> d = pc.fnnls(Z, x)
贡献
从 github 克隆项目。创建一个主题分支并为该分支发出拉取请求。等待审核。
设置 - Linux
在 Linux 平台上,环境可以很容易的设置如下(进入克隆目录后):
$ ./install_setup.sh
这将创建一个虚拟环境并安装 python 依赖项。
启用环境:
$ source env.sh
编译项目:
$ make build
可以通过以下方式访问测试和样式检查:
$ make test
和
$ make check
设置 - Windows
Windows shell 脚本和设置环境是一个受欢迎的贡献。
项目详情
关
fnnlsEigen -1.0.1.tar.gz 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 8bb22fce10c2e4ba29fee07e0c2cabc405fe1e92744e69d49cf787527ed39345 |
|
| MD5 | 2a2c56f57714061b543291de73b43800 |
|
| 布莱克2-256 | c099e5198b4b9546beca06d4d65e739a20e16171120bd6ceede57cffb0a4f042 |
关
fnnlsEigen -1.0.1-cp38-cp38-manylinux_2_24_x86_64.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 104526d8a94b582b7fab29f96037fc473e95aad474d5a1782991ee8994474e8a |
|
| MD5 | 4b91e7b6a3a0e81cabd2abe3ac12440e |
|
| 布莱克2-256 | 4bb50ea41aba33790544cd38c1eda61fbba0d0fbeb001d8ad7c9166d2c717ea3 |
关
fnnlsEigen -1.0.1-cp37-cp37m-win_amd64.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | ed6aa383be7e5d318dad443f6ecdc5f1ee6a94e9057dd39c1c522a72c2a779db |
|
| MD5 | d0e0bac0dd173a696039a462a4213f12 |
|
| 布莱克2-256 | 532d8548150ad63f6ae307a55a201e52314641f3db124b77c132b1e29328beb8 |