简体   繁体   English

如何使用ctypes将矩阵从C ++函数返回到Python

[英]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.

相关问题 如何使用ctypes将数组从C ++函数返回到Python - How to return array from C++ function to Python using ctypes ctypes如何将字符串从python传递到c ++函数,以及如何将字符串从c ++函数返回到python - ctypes how to pass string from python to c++ function, and how to return string from c++ function to python 如何使用ctypes从C ++函数返回对象? - how do I return objects from a C++ function with ctypes? 如何从C ++返回char **并使用ctypes将其填充在Python中的列表中? - How to return char ** from C++ and fill it in a list in Python using ctypes? 如何使用ctypes将类对象从c ++(DllExport)返回到python反之亦然? - How to return a class object from c++ (DllExport) to python using ctypes vice-versa? 如何使用ctypes,python将字符串参数传递给C ++函数 - How to pass string parameters to C++ function using ctypes, python C ++-使用ctypes进行Python绑定-在函数中返回多个值 - C++ - Python Binding with ctypes - Return multiple values in function 使用ctypes的c ++ python - python with c++ using ctypes 使用 ctypes 的 .dll 中的 python 中的 C++ 函数 - 找不到函数和访问冲突 - C++ function in python from .dll using ctypes - function not found and access violation AttributeError:python:未定义符号:使用ctypes从Python访问C ++函数时 - AttributeError: python: undefined symbol: when accessing C++ function from Python using ctypes
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM