2016-04-20 2 views
4

J'écris actuellement un wrapper pour un projet C++ qui utilise std::complex<double>, disponible en cython comme libcpp.complex.complex[double].Conversion complexe en Complexe Python

Cependant il n'y a pas de conversion implicite entre ceci et le complexe Python, j'essaye de trouver la meilleure manière de faire cette conversion.

L'évidence est d'utiliser

cdef libcpp.complex.complex[double] x = ... 
X = complex(x.real(),x.imag() 

Et

cdef complex Y = ... 
cdef libcpp.complex.complex[double] y = libcpp.complex.complex[double](Y.real, Y.imag) 

Et

cdef libcpp.complex.complex[double] z 
cdef complex Z = ... 
z.real(Z.real) 
z.imag(Z.imag) 

Mais est-il une meilleure façon, de préférence pour faire cython faire la conversion automatiquement.

Pour un cela se produit dans certaines fonctions cpdef, et je voudrais éviter d'utiliser le complexe Python dans les appels de Cython pour une vitesse améliorée. Cependant, pour autant que je sache, Cython ne peut implicitement effectuer cette conversion, et je ne peux donc pas éviter d'utiliser le complexe Python pour le code qui peut être appelé depuis Python ou C++.

Répondre