将PyArrayObject *转换为int *失败

时间:2015-10-08 16:33:22

标签: c++ c arrays numpy casting

我有一个非常快速的问题。任何人都可以解释我为什么当我将Numpy整数数组传递给我的C代码然后我无法检索正确的值?我的猜测是C中的int类型与默认的Numpy不一样,但我坦率地迷失在在线文档中。这是我的情况:

在Python模块中我有一个字典

from numpy import * 

pars = {...,
        'ICs' : array([0,1,2])
       }

然后我把这个字典传递给我的C函数

#include <Python.h>
#include <numpy/arrayobject.h>

...
...
int main(){
    int i, *ics;

    //That is the assignment according to the manual 
    ics = (int*)((PyArrayObject*)PyDict_GetItemString(pardict,"ICs"))->data);
    for(i=0;i<9;i++) printf("\ni=%d\t-->%d",i,ics[i]);   
    return 0;     
}

然后在执行时,我得到的是:

i=0-->0
i=1-->0
i=2-->1
i=3-->0
i=4-->2
i=5-->0
i=6-->9102
i=7-->-289
i=8-->2910103
i=9-->294921

我原本希望看到我的三个整数打印为i<3。任何澄清将不胜感激!

提前致谢!

1 个答案:

答案 0 :(得分:0)

您需要使用正确的函数来访问底层数组,即PyArray_BYTES,如http://docs.scipy.org/doc/numpy/reference/c-api.array.html中所述。

请注意,这样可以直接访问缓冲区,而无需考虑步幅!