【发布时间】:2019-06-14 10:55:31
【问题描述】:
我注意到可以使用 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 的引用,尽管如此,这给出了矩阵的 1D 平面视图,因为 void * 引用了矩阵的第一个元素。
有什么方法可以让我使用最后一次调用获得对内部数组的引用,并且仍然能够将数组作为 3D C 数组使用?
【问题讨论】:
-
如果您真正需要的话,您是否有理由不在 C 中使用 3D 数组?
-
我获得的数组来自应用程序的 Python 端。我将用于繁重计算阶段的 3D Numpy 数组转移到 C,在 C 中访问和修改它,然后使用现在修改的 Numpy 数组继续 Python 部分。所有这一切,无需传输数据或复制(因此我需要直接引用)