python - Python/Cython 中的快速 n 维稀疏数组

标签 python cython sparse-matrix sparse-array

我有一个应用程序涉及非常稀疏的大型 n 维数组。 scipy.sparse 具有有用的“矢量化获取和设置”功能,因此可以使用 Cython 快速填充稀疏矩阵。

当然 scipy 包不能处理 n 维。我发现有两个包在 python sparrayndsparse 中执行 n 维稀疏数组。但是似乎两者都没有矢量化获取和设置功能。<​​/p>

所以我需要:

  • 一个用于 n 维数组的 python 包,带有矢量化 get 和 set 或
  • 一个用于稀疏数组的 c 库,我可以使用 Cython 或
  • 轻松访问它
  • 一些“自己动手”选项,我猜这需要一个等效于 python dict 的 c

出于我的目的,我认为将 n 维坐标映射回一维或二维可能会起作用。更好的是有一个 dict 等价物,我可以在 Cython 循环中快速访问。我假设这排除了python dict

想知道是否有人可以给我一个如何在 Cython 中使用 c++ map 对象的示例?

最佳答案

如果您决定使用 C dict 选项,您可以使用 C++ STL 的 std::map。您不太可能找到更快或更健壮的 native 代码来实现字典/ map 。

cppmap.pyx:

# distutils: language = c++

cdef extern from "<map>" namespace "std":
    cdef cppclass mymap "std::map<int, float>":
        mymap()
        float& operator[] (const int& k)

cdef mymap m = mymap()
cdef int i
cdef float value

for i in range(100):
    value = 3.0 * i**2
    m[i] = value

print m[10]

setup.py:

from distutils.core import setup
from Cython.Build import cythonize
setup(name = "cppmapapp"
  ext_modules = cythonize('*.pyx'))

命令行:

$ python setup.py build
$ cd build/lib.macosx-10.5-x86_64-2.7
$ python -c 'import cppmap'
300.0

关于python - Python/Cython 中的快速 n 维稀疏数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20114194/

相关文章:

python - 如何获得 csr_matrix 中列的均值和标准差?

python - 混合 Cython 类和 SqlAlchemy

python - PyQt 和 PyCairo

javascript - Python - 将 csv 文件转换为 JSON

python - 删除范围为 .01 到 .99 的所有 float

python - 设置 setuptools 以创建具有可用 header 的可导入包

python - Numpy vs Cython 速度

java - 带有枚举键的稀疏映射

python - 如何从更大的稀疏矩阵的 block 总和中有效地创建新矩阵

python - Django StreamingHttpResponse 在用户完成下载后删除文件