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

标签 c++ python ctypes

我想将矩阵从 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/

相关文章:

c++ - 如何以形状/多边形形式渲染图像?

c++ - fstream::close() 不关闭文件

Python3 共享扩展不链接库依赖

python - Python 的 ctypes.c_long 在 64 位系统上是 64 位的吗?

c++ - STLportd.5.2.dll 和 STLportSTLd.5.2.dll 有什么区别?

c++ - 如何使用文件 I/O C++

python - Pandas 数据框到 JSONL(JSON 行)的转换

Python - 使用 Python 3 urllib 发出 POST 请求

python - 带有 numpy/ctypes 的环形缓冲区

python - 使用 Python ctypes 的 C 函数名称相关段错误