2011-06-09 48 views
1

我想从一个模块中获取一些数据,这是一个用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文档,但到目前为止我还没有找到答案。

回答

2

这将使意义,如果INT为32 位,但我假设在C INT是16位 (GCC openSUSE中在86英特尔 机)。我试着用dtypes 为32位,奇怪的是我得到的 结果,我想在运行:

不怪都:你的假设是错误的,你的机器是32位与32位int和16位短int ..除非你正在做一些(相当令人钦佩)retrocomputing!

检查sizeof(int)并乘以8,或者直接将数字存储在int中并打印出来,以说服自己。