【发布时间】:2019-09-16 11:44:10
【问题描述】:
我目前正在尝试包装我创建的 C++ 类。其中一个函数返回一个包含复数浮点数的向量:
std::vector<std::vector<std::complex<float>>>
我的 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()
我的 bridge.hpp 文件如下所示:
#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
然后,尝试运行 setup.py,给出以下消息:
[1/1] Cythonizing snowconecpp.pyx
Error compiling Cython file:
------------------------------------------------------------
...
DataBridge() except +
void start()
void stop()
bool isDataReady()
vector[vector[complex[float]]] getData()
^
------------------------------------------------------------
DataBridge.pxd:24:29: Array size must be a compile time constant
Error compiling Cython file:
------------------------------------------------------------
...
DataBridge() except +
void start()
void stop()
bool isDataReady()
vector[vector[complex[float]]] getData()
^
------------------------------------------------------------
DataBridge.pxd:24:29: unknown type in template argument
Traceback (most recent call last):
File "setup.py", line 15, in <module>
setup(ext_modules=cythonize("projectxcpp.pyx", language_level="3"))
File ".../lib/python3.6/site-packages/Cython/Build/Dependencies.py", line 1096, in cythonize
cythonize_one(*args)
File ".../lib/python3.6/site-packages/Cython/Build/Dependencies.py", line 1219, in cythonize_one
raise CompileError(None, pyx_file)
Cython.Compiler.Errors.CompileError: projectxcpp.pyx
我的 setup.py 文件只包含:
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules=cythonize("projectxcpp.pyx", language_level="3"))
当在我的包装器中将类型声明为 complex[float] e 或 vector[vector[float]] e 时,这些将解析并移至编译的下一步。
只是想知道在 Cython 的向量中放置复杂类型是否有特殊要求 - 似乎无法为涉及 C++ 包装的这种或类似情况找到答案。
我的最终目标是能够将这些数据读入一个 numpy 数组。如果有更好的解决方法,请让我也知道 - 谢谢!
【问题讨论】:
标签: python c++ vector cython complex-numbers