在 Cython 中,从 std::complex<double>
的 C++ vector 开始像这样...
# Imports
from libcpp.vector cimport vector
from libcpp.complex cimport complex as cpp_complex
ctypedef my_complex = cpp_complex[double]
# Code
cdef vector[my_complex] vec
...我怎样才能将此 vector 转换为 double complex
具有默认 cython/python 的内存 View complex
?
cdef complex[::1] mem_view = ???
或者,我如何告诉 Cython 使用 C++ 的 std::complex<double>
而不是double complex
作为 complex
的下面类型?
最佳答案
用 vec.data()
提取指向数据的指针就足够了(返回一个complex[double]*),将其转换为cythoncomplex*,并将数组转换为固定 vector 大小:
cdef complex[::1] mem_view = <complex[:vec.size()]>(<complex*>vec.data())
对于替代方案(将 std::complex<double>
| cython 的 cpp_complex[double]
设置为标准 complex
类型),必须添加一些定义来触发 https://github.com/cython/cython/blob/master/Cython/Utility/Complex.c#L56 中的选择。但是,我不知道该怎么做。
关于c++ - Cython:将 C++ `std::complex<double>` 的 vector 转换为 C `double complex`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69030911/