2017-07-31 102 views
0

我有一個值列表的列表(其中每個值的列表是相同的長度),在2D ndarray中。 實施例對二維numpy陣列中的所有列進行操作的方法。

[[0,1,0], 
[0,1,0], 
[0,1,0], 
[1,0,1], 
[1,0,1]] 

我想執行一個操作,其平均柱並返回,如果平均值小於0.5以上。我將如何在numpy中實現這一點?

我知道我可以使用

for i in range(len(vectors[0])): 
    cur_vals = []   
    for j in range(len(vectors)): 
     cur_vals.append(vectors[j][i]) 
    col_operation(cur_vals) 

不過,我已被告知,numpy的提供相似於R要做到這一點,所以我期待專門爲公用事業。

回答

0

您可以指定一個軸參數.mean()

In [180]: a 
Out[180]: 
array([[0, 1, 0], 
     [0, 1, 0], 
     [0, 1, 0], 
     [1, 0, 1], 
     [1, 0, 1]]) 

In [194]: a.mean(axis=0) 
Out[194]: array([ 0.4, 0.6, 0.4]) 

現在產生boolean值面具是這樣的:

In [195]: a.mean(axis=0) > .5 
Out[195]: array([False, True, False], dtype=bool) 

要獲得平均> .5柱,使用布爾索引:

In [196]: a.T[a.mean(axis=0) > .5] # you'll need the transpose first 
Out[196]: array([[1, 1, 1, 0, 0]]) 
+0

謝謝你的幫助。我更瞭解軸概念。然而,我的問題措辭錯誤,我的意思是在每個子數組的第i個元素的列。對於我給出的示例數組,我想獲得np.mean(vectors,axis =?)= [2/5,3/5,2/5]> .5 - > [False,True,False]。我會爲此設置axis = 2嗎? –

+0

@JamesSteel關閉。軸= 0。它仍然會工作。 :)讓我編輯。 –