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



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

当然scipy包不能处理n维。我发现有两个包在python sparrayndsparse中执行n维稀疏数组。然而,它似乎都没有矢量化的获取和设置功能。

所以我需要:

  • 用于n维数组的矢量化get和set或的python包
  • 一个用于稀疏阵列的c库,我可以使用Cython或
  • 一些"滚动你自己的"选项,我想这需要一个相当于python dict的c

就我的目的而言,我认为将n维坐标映射回1或二维是可行的。不过,最好是有一个dict等价物,我可以在Cython循环中快速访问它。我认为这排除了python dict

想知道是否有人能给我一个如何在Cython中使用c++映射对象的例子?

如果您决定使用C dict选项,您可以使用C++STL的std::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

相关内容

  • 没有找到相关文章

最新更新