2011-06-09 56 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中並打印出來,以說服自己。