2012-07-12 68 views
1

我有以下問題。在知道與numpy我可以閱讀genfromtext數據文件。然後我可以用掩碼(從字典中)選擇記錄。結合numpy陣列和掩模

>>> gln = a[a['AA2'] == 'GLN'] 
>>> gln['mean'].mean() 
62.805000305175781 

我怎樣才能做到這一點,而不是從磁盤讀取這些數組的組合呢?

x=[] 
y=[] 
ov=[] 
aa=[] 

a = numpy.array(x,y,ov,aa)   <== does not actually work 
gln = a[a[3] == 'GLN'] 
gln['mean'].mean() 

我如何得到這個工作?

回答

0

請記住,在Python中,由[]生成的對象通常被稱爲list,而不是array。所以考慮到這一點,我假設你真正的問題是「如何將4個獨立的python list s轉換爲2維numpy陣列?」

答案取決於您希望list s如何排列在陣列中。假設每個列表代表一排,你可以這樣做:

>>> x = range(0, 4) 
>>> y = range(4, 8) 
>>> ov = range(8, 12) 
>>> aa = range(12, 16) 
>>> numpy.array([x, y, ov, aa]) 
array([[ 0, 1, 2, 3], 
     [ 4, 5, 6, 7], 
     [ 8, 9, 10, 11], 
     [12, 13, 14, 15]]) 

或者,如果每個列表代表一欄,你可以這樣做:

>>> numpy.array(zip(x, y, ov, aa)) 
array([[ 0, 4, 8, 12], 
     [ 1, 5, 9, 13], 
     [ 2, 6, 10, 14], 
     [ 3, 7, 11, 15]]) 

然後,你可以只使用布爾索引你與genfromtxt產生的array做:

>>> a = numpy.array(zip(x, y, ov, aa)) 
>>> a[a == 1] 
array([ 1, 5, 9, 13, 3, 7, 11, 15]) 

這可能是你正在尋找合併x的一些其他的方式,y,ovaa組成一個數組。在這種情況下,您將不得不指定列表中的內容和所需輸出的形狀。

+0

我在這裏得到一個類型錯誤。 TypeError:不支持的操作數類型爲%:'numpy.ndarray'和'int' – tarrasch 2012-07-13 09:19:51

+0

@tarrasch,我沒有這個問題。你使用的是哪種版本的numpy? 'numpy.version.version'的價值是什麼?但'%'是無關緊要的 - 這只是生成布爾數組的一種快速方法。 – senderle 2012-07-13 09:40:03

+0

沒關係。看起來我很愚蠢。你能改變你的例子到[a == 1]嗎? %符號混淆了我的系統,導致該示例無法正常工作。謝謝你指出。公認。 – tarrasch 2012-07-13 09:42:39