2

在Cython中,从的C++向量开始标准::复合<double>这样地。。。

#进口来自libcpp.vector cimport vector从libcpp.complex cimport复合体转换为cppcomplexctypedef my_complex=cpp_complex[double]#代码cdef矢量[my_complex]vec

…如何将此向量转换为双复合体使用默认cython/python的memoryview复杂的?

cdef复数[::1]mem_view=???

或者,我如何告诉Cython使用C++标准::复合<double>而不是双复合体作为复杂的?

1答案1

重置为默认值
2

提取指向数据的指针就足够了vec.data()(返回复数[double]*),将其转换为cython复数*,并将数组转换为固定的向量大小:

cdef复数[::1]mem_view=<complex[:vec.size()]>(<complex*>vec.data())

对于备选方案(设置标准::复合<double>|赛顿的cpp_complex[双重]成为标准复杂的类型),则必须添加一些定义以触发中的选择https://github.com/cython/cython/blob/master/cython/Utility/Complex.c#L56然而,我不知道该怎么做。

4
  • 注:如果答案有更好的解释或显示了备选答案,则会被标记为正确答案!
    – 伊巴朗
    评论 2021年9月2日13:08
  • 注2:要返回numpy数组,只需执行np.asaray(内存视图).
    – 伊巴朗
    评论 2021年9月2日14:31
  • 这可能是正确的答案。要设置c定义,请使用额外_复杂_标记。在Linux上,这将是-DCYTHON_CCOMPLEX=0(或1)。请注意,它在默认情况下处于启用状态,只影响C++编译阶段,因此您仍然需要在Cython中进行强制转换。
    – 大卫·W
    评论 2021年9月4日10:30
  • 我有这样的感觉,错误是在赛马被调用,这意味着C++编译器尚未参与其中。很高兴知道!
    – 伊巴朗
    评论 2021年9月5日上午10:37

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.