从C作为3D数组访问Numpy矩阵

时间:2019-06-14 10:55:31

标签: python c arrays numpy 3d

我已经注意到,可以使用PyArray_AsCArray来创建对3D numpy浮点数数组的借用/被盗引用,如下所示:

...
float ***matrix_c;
npy_intp dims[3] = {X, Y, Z};
PyArray_Descr *descriptor = PyArray_DescrFromType(NPY_FLOAT32);
PyArray_AsCArray(&matrix_pyobject, (void **)&matrix_c, dims, 3, descriptor);
...

但是,当从代码的不同部分执行此操作以转移相同的数组时,这不适用于我的情况。我需要每次传输都给我一个对内部数组的引用,因此我可以使用相同的地址。

为此,我发现我可以访问内部数组而不必担心使用PyArray_DATA进行引用,尽管如此,它还是提供了矩阵的一维平面视图,就像void *引用了矩阵的第一个元素一样

有没有什么方法可以使用上一次调用来获取对内部数组的引用,并且仍然能够将该数组作为3D C数组使用?

1 个答案:

答案 0 :(得分:1)

找到了解决此问题的简便方法,因此我将其发布,以防万一其他人对此感到困惑。

我尝试通过2D结构的指针来解决它,但最后,我需要的只是将其转换为3D结构的指针:

web