我对在C中操作numpy数组还不熟悉。下面是一段代码,让我1)将一个一维64位浮点numpy数组的列表传递给C,2)遍历每个数组,打印其内容。
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include "Python.h"
#include "numpy/arrayobject.h"
#include "list_of_ndarrays_lib.h"
void print_all(PyObject *list) {
int i, j;
PyArrayObject *arrayObj;
double *arrayData;
for (i = 0; i < PyObject_Length(list); i++) {
arrayObj = (PyArrayObject *) PyList_GET_ITEM(list, i);
arrayData = PyArray_DATA(arrayObj);
for (j = 0; j < PyArray_SHAPE(arrayObj)[0]; j++) {
printf("%f ", arrayData[j]);
}
printf("\n");
}
}
这段代码可以工作,但是
PyArray_SHAPE(arrayObj)[0]
不能推广到n维数组,如果我用PyArray_SIZE(arrayObj)
替换它,我会得到一个分段错误。我做错什么了?
最佳答案
只需在print_all()开头添加import_array();
调用。它将初始化数组函数c-api。
关于python - PyArray_SIZE的正确用法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31946137/