如何在Cython 中执行与以下 C++ 代码等效的代码?
typedef vector<double> dvec;
dvec *arr = new dvec[n]; // n is an unsigned int (unknown at compile time)
// do something with arr; for example...
arr[0].push_back(10);
cout << arr[0][0] << endl;
Run Code Online (Sandbox Code Playgroud)
我试图为 n 个向量分配内存,但是我不知道如何在 Cython 中进行新的放置。任何帮助将不胜感激。
似乎您不能new something[n]在 Cython 中执行 array new ( ) 。最简单的解决方案是创建 1 行 C++ 函数来执行数组新建和数组删除,然后调用它们。
template <typename T>
T* array_new(int n) {
return new T[n];
}
template <typename T>
void array_delete(T* x) {
delete [] x;
}
Run Code Online (Sandbox Code Playgroud)
从以下 Cython 文件调用
# distutils: language = c++
from libcpp.vector cimport vector
ctypedef vector[double] dvec
cdef extern from "cpp_funcs.hpp":
T* array_new[T](int)
void array_delete[T](T* x)
def example(int n):
cdef dvec* arr = array_new[dvec](n)
try:
if n>0:
arr[0].push_back(10)
print(arr[0][0])
finally:
array_delete(arr)
Run Code Online (Sandbox Code Playgroud)
鉴于 Cython 的 C++ 支持是有限的,并且在某些地方很尴尬(并且你必须对 C++ 有很好的理解才能使用它)我认为编写少量 C++ 代码通常是一个合理的解决方案,并且可以节省相当多的时间。不过,有些人似乎想不惜一切代价避免这种情况......
我仍然建议使用向量向量 ( vector<vector<double>>) 代替,因为您可以免费获得内存管理。更好的是坚持使用 Python 类型并使用 numpy 数组列表,但如果您想与外部 C++ 代码交互,这可能不适合。
| 归档时间: |
|
| 查看次数: |
1119 次 |
| 最近记录: |