我想从一个模块中获取一些数据,这是一个用ctypes包装的共享对象。 数据是一个数字数组,所以我使用numpy数组来存储数据。但我知道我 不明白numpy如何组织内存中的数组。numpy数组如何在内存中组织?
如果我有一个C函数,将填补一个数组象下面这样:
int filler(int* a,int length){
int i=0;
for(i=0;i<length;i++){
a[i]=i;
}
return 0;
}
然后我会使用ctypes的
import ctypes
import numpy
lib = ctypes.cdll.LoadLibrary("libname")
data = numpy.zeros((1,10),dtype=numpy.int16)
lib.filler(data.ctypes.data,ctypes.c_int(10))
print data
调用蟒蛇这个功能,但我的输出出来的这种方式。
dtype=numpy.int16
[[0 0 1 0 2 0 3 0 4 0]]
这将使意义,如果INT为32位,但我假设在C INT是16位(GCC openSUSE中在86英特尔机)。 我试着用dtypes为32位运行,奇怪的是我得到的结果,我想:
dtype=numpy.int32
[[0 1 2 3 4 5 6 7 8 9]]
试图使正在发生的事情我INT8跑感,我得到了以下内容:
dtype=numpy.int8
[[0 0 0 0 1 0 0 0 2 0]]
我确实看了一下numpy文档,但到目前为止我还没有找到答案。