我对在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/

10-14 05:29