tutorial python cython sparse-matrix sparse-array

python - tutorial - cython install



Array disperso n-dimensional rĂ¡pido en Python/Cython (1)

Tengo una aplicación que involucra grandes matrices n-dimensionales que son muy escasas. scipy.sparse tiene una útil función de ''obtención y configuración vectorizada'', por lo que Cython se puede usar para poblar una matriz dispersa rápidamente.

Por supuesto, el paquete scipy no puede manejar n-dimensiones. Hay dos paquetes que he encontrado que hacen matrices dispersas n-dimensionales en python sparray y ndsparse . Sin embargo, parece que tampoco tiene la función vectorizada de obtención y configuración.

Así que necesito:

  • un paquete de Python para matrices n-dimensionales con get y set vectorizados o
  • biblioteca de CA para matrices dispersas a las que puedo acceder fácilmente con Cython o
  • Alguna opción de ''enrollar tu propia'' que supongo que requeriría una CA equivalente a un dict de Python

Para mi propósito, creo que la asignación de las coordenadas de n dimensiones a 1 o dos dimensiones podría funcionar. Sin embargo, lo que sería mejor es tener un dictado equivalente al que pueda acceder rápidamente dentro de un ciclo de Cython. Supongo que esto descarta el dict Python.

¿Se pregunta si alguien podría darme un ejemplo de cómo usar el objeto de mapa c ++ desde Cython?


Si decide utilizar la opción C dict, puede usar std :: map de C ++ STL. Es poco probable que encuentre un código nativo más rápido o más robusto que implemente un diccionario / mapa.

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''))

Línea de comando:

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