Python ctypes。获取二维数组

达尼列昂季耶夫

我有这个 C++ 代码:

#define DLLEXPORT extern "C"

DLLEXPORT double **points(unsigned N, unsigned D)
{

double **POINTS = new double * [N];
for (unsigned i=0;i<=N-1;i++) POINTS[i] = new double [D];
for (unsigned j=0;j<=D-1;j++) POINTS[0][j] = 0;

// do some calculations, f.e:
// POINTS[i][j] = do_smth()
//


return POINTS
}

我使用这个命令编译:

g++ -shared gpoints.cc -o gpoints.so -fPIC

现在我想使用ctypes. 我试过这样的:

mydll = ctypes.cdll.LoadLibrary('/.gpoints.so')
func = mydll.points
mytype = c.c_double * 3 * 10
func.restype = mytype
arr = func(10, 3)
print(arr)

当我尝试运行它时,我得到:

terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
[1]    2794 abort      python3 test.py

那么,如何在 Python 中正确调用这个函数呢?

PS 我“按原样”得到了这个库,因此,最好在不重写 C++ 代码的情况下使用它。

马克·托洛宁

restype的等效于double[10][3],但它实际返回的是double**

#!python3.6
import ctypes as c
dll = c.CDLL('test')
dll.points.argtypes = c.c_int,c.c_int
dll.points.restype = c.POINTER(c.POINTER(c.c_double))
arr = dll.points(10,3)
for i in range(10):
    for j in range(3):
        print(f'({i},{j}) = {arr[i][j]}')

我使用以下 DLL 代码进行测试(Windows):

extern "C" __declspec(dllexport)
double **points(unsigned N, unsigned D)
{
    double **POINTS = new double * [N];
    for (unsigned i=0;i<=N-1;i++)
    {
        POINTS[i] = new double [D];
        for(unsigned j=0;j<=D-1;j++)
            POINTS[i][j] = i*N+j;
    }
    return POINTS;
}

输出:

(0,0) = 0.0
(0,1) = 1.0
(0,2) = 2.0
(1,0) = 10.0
(1,1) = 11.0
(1,2) = 12.0
(2,0) = 20.0
(2,1) = 21.0
   :

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python二维数组

来自分类Dev

Python二维数组

来自分类Dev

在Python中获取二维数组的乘积

来自分类Dev

Python如何获取二维数组的子集?

来自分类Dev

二维数组python中的邻居

来自分类Dev

在python中索引二维数组

来自分类Dev

Python创建空的二维数组

来自分类Dev

在Python中转换二维数组

来自分类Dev

Python中二维数组的对数

来自分类Dev

Python:特殊的二维数组

来自分类Dev

Python - 添加一维数组作为二维列

来自分类Dev

如何在python中按切片获取二维数组的所有元素

来自分类Dev

Python:获取二维数组中所有元素的对数

来自分类Dev

Python:按数组长度对二维数组排序?

来自分类Dev

Python二维数组-更改元素

来自分类Dev

在Python中读取二维数组的简单方法

来自分类Dev

如何在python中对二维数组进行排序

来自分类Dev

Python将列表转换为二维numpy数组

来自分类Dev

空第二维的数组/向量的Python / numpy问题

来自分类Dev

Python numpy按条件过滤二维数组

来自分类Dev

Python的二维数组中是否存在别名?

来自分类Dev

在python中将列表转换为二维数组

来自分类Dev

使用列表推导搜索二维数组(Python)

来自分类Dev

将二维C数组传递给python numpy

来自分类Dev

二维数组python中所有列的总和

来自分类Dev

在Python 3.x中求和二维数组

来自分类Dev

在二维python数组中搜索值

来自分类Dev

Python保存并读取二维数组中的灰度图像?

来自分类Dev

在Python中寻找二维数组的平均值