Python 在Cython中包装返回复杂类型向量的函数
我目前正在尝试包装我创建的C++类。其中一个函数返回包含复杂浮点的向量向量:Python 在Cython中包装返回复杂类型向量的函数,python,c++,vector,cython,complex-numbers,Python,C++,Vector,Cython,Complex Numbers,我目前正在尝试包装我创建的C++类。其中一个函数返回包含复杂浮点的向量向量: std::vector 我的DataBridge.pxd文件如下所示: # distutils: language = c++ from libcpp cimport bool from libcpp cimport float from libcpp.vector cimport vector from libcpp.complex cimport complex from libc.float cimport
std::vector
我的DataBridge.pxd文件如下所示:
# distutils: language = c++
from libcpp cimport bool
from libcpp cimport float
from libcpp.vector cimport vector
from libcpp.complex cimport complex
from libc.float cimport float
cimport numpy as np
import numpy as np
cdef extern from "projectxcpp/bridge.cpp":
pass
# Declare the class with cdef
cdef extern from "projectxcpp/bridge.hpp":
cdef cppclass DataBridge:
DataBridge() except +
void start()
void stop()
bool isDataReady()
vector[vector[complex[float]]] getData()
#ifndef BRIDGE_HPP
#define BRIDGE_HPP
#include <vector>
#include <complex>
...
class DataBridge {
public:
int start(void);
int stop(void);
bool isDataReady(void);
std::vector<std::vector<std::complex<float>>> getData(void);
private:
...
};
#endif
My bridge.hpp文件如下所示:
# distutils: language = c++
from libcpp cimport bool
from libcpp cimport float
from libcpp.vector cimport vector
from libcpp.complex cimport complex
from libc.float cimport float
cimport numpy as np
import numpy as np
cdef extern from "projectxcpp/bridge.cpp":
pass
# Declare the class with cdef
cdef extern from "projectxcpp/bridge.hpp":
cdef cppclass DataBridge:
DataBridge() except +
void start()
void stop()
bool isDataReady()
vector[vector[complex[float]]] getData()
#ifndef BRIDGE_HPP
#define BRIDGE_HPP
#include <vector>
#include <complex>
...
class DataBridge {
public:
int start(void);
int stop(void);
bool isDataReady(void);
std::vector<std::vector<std::complex<float>>> getData(void);
private:
...
};
#endif
当在我的包装中声明类型为complex[float]e
或vector[vector[float]]e
时,这些类型将解析并移动到编译的下一步
只是想知道对于Cython来说,在向量中放置一个复杂类型是否有特殊的要求,似乎无法找到这种情况或类似的情况,其中包含C++包。
我的最终目标是能够将这些数据读入numpy数组。如果有更好的方法,请让我也知道-谢谢 > P>我认为问题是
from libcpp.complex cimport complex as cpp_complex
# later
vector[vector[cpp_complex[float]]]
或
对于问题的更一般部分:我的偏好是不要为这样的Numpy数组提供数据。部分原因是我真的不喜欢2D数组被定义为指向指针的指针或向量的向量。最好使用与形状信息一起存储的一维数组/向量,以便对其进行索引 有几个与Numpy接口的选项:
PyArray\u SimpleNewFromData
让Numpy包装内存。这需要小心确保在正确的时间释放它cimport libcpp.complex
# later
vector[vector[libcpp.complex.complex[float]]]