c++ - Cython:将 C++ `std::complex<double>` 的 vector 转换为 C `double complex`

标签 c++ casting cython complex-numbers memoryview

在 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/

相关文章:

swift - 为什么我不能在Swift中将(String)-> String转换为(Any)-> Any?

python - Cython 作为 Python 到 C 转换器的示例程序

python - Cython __pyx_r 可以在这个函数中使用未初始化的

python - 在 Cython 中声明 FILE 指针

c++ - 如何传递缺少参数的函数?

c++ - 如何不继承 C++ 类中的变量

c++ - 如何隐藏 range-v3 的复杂范围类型?

c++ - Opengl错误C0000编译错误

c# - 区分两个类

ios - AnyObject 不可转换为 'String'