[英]How to return a matrix from a C++ function to Python using ctypes
I want to return a matrix from a C++ function to a Python function. 我想从C ++函数返回一个矩阵到Python函数。 I've checked this solution, which is an example for returning an array.
我已经检查了这个解决方案,这是一个返回数组的例子。
As a example, I want to return a 10x10
array filled of 10
's. 作为一个例子,我想返回一个
10x10
填充的阵列10
的。
function.cpp: function.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;
}
The Python code is: wrapper.py 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
For compiling this I use: 为了编译这个我使用:
g++ -c -fPIC function.cpp -o function.o
g++ -shared -Wl,-soname,library.so -o library.so function.o
If soname
doesnt work, use install_name
: 如果
soname
不起作用,请使用install_name
:
g++ -c -fPIC function.cpp -o function.o
g++ -shared -Wl,-install_name,library.so -o library.so function.o
After running the python program, python wrapper.py
this is the output im having: 运行python程序之后,
python wrapper.py
这是输出我有:
[10 10 10 10 10 10 10 10 10 10]
Only one row of 10 elements. 只有一行10个元素。 I would like to have the 10x10 matrix.
我想要10x10矩阵。 What I'm doing wrong?
我做错了什么? Thanks in advance.
提前致谢。
function.cpp
: function.cpp
:
extern "C" int* function(){
int* result = new int[100];
for(int k=0;k<100;k++) {
result[k] = 10;
}
return result;
}
In wrapper.py
在
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.