我想将矩阵从 C++ 函数返回到 Python 函数。我检查过this解决方案,这是返回数组的示例。
例如,我想返回一个 10x10
数组,其中填充了 10
。
函数.cpp:
extern "C" int* function(){
int** information = new int*[10];
for(int k=0;k<10;k++) {
information[k] = new int[10];
}
for(int k=0;k<10;k++) {
for(int l=0;l<10;l++) {
information[k][l] = 10;
}
}
return *information;
}
Python代码是: wrapper.py
import ctypes
from numpy.ctypeslib import ndpointer
lib = ctypes.CDLL('./library.so')
lib.function.restype = ndpointer(dtype=ctypes.c_int, shape=(10,))
res = lib.function()
print res
为了编译这个,我使用:
g++ -c -fPIC function.cpp -o function.o
g++ -shared -Wl,-soname,library.so -o library.so function.o
如果 soname
不起作用,请使用 install_name
:
g++ -c -fPIC function.cpp -o function.o
g++ -shared -Wl,-install_name,library.so -o library.so function.o
运行 python 程序后,python wrapper.py
这是我的输出:
[10 10 10 10 10 10 10 10 10 10]
只有一行 10 个元素。我想要 10x10 矩阵。我做错了什么?提前致谢。
最佳答案
函数.cpp
:
extern "C" int* function(){
int* result = new int[100];
for(int k=0;k<100;k++) {
result[k] = 10;
}
return result;
}
在wrapper.py
lib.function.restype = ndpointer(dtype=ctypes.c_int, shape=(10,)) //incorrect shape
lib.function.restype = ndpointer(dtype=ctypes.c_int, ndim=2, shape=(10,10)) // Should be two-dimensional
关于c++ - 如何使用 ctypes 将矩阵从 C++ 函数返回到 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19113154/