2014-09-02 295 views
0

標題說明了一切。Python根據某些條件從Numpy Array中移除列

假設我有包含值總結了numpy的陣列1。

[0.5 0.3 0.1 0.05 0.03 0.01] 

而且我想刪除這是該陣列的所有值小於0.05 ,並在同一時間刪除相應的列,從而導致數組 這樣的:

[0.5 0.3 0.1 0.05] 

當然也有辦法做到這一點。但是我對目前爲止產生的代碼 並不滿意。我覺得必須有一個優雅的方式來實現這一點,Python的 。

THX的幫助

編輯:

感謝您的幫助。我覺得我已經走上了正軌。我只是沒有 知道如何使用語法。儘管不明白倒票。 :(

+2

如果您包含您以前嘗試過的方法,這將會很有幫助。甚至可能指出你對他們不滿意。 – 2014-09-02 18:33:33

+0

好吧,我已經在谷歌搜索相當一段時間了。我看到了X [X> 1] = 5這樣的符號,這有助於取代值,但實際上刪除了列,我想不出任何方法,只能做一個for循環與if-子句結合使用並使用numpy.delete,這與所有pythonic糖相比似乎有點笨拙。 – Nimi 2014-09-02 18:35:51

回答

2
a = [0.5 0.3 0.1 0.05 0.03 0.01] 
print a[a >= .05] 
+0

Thanx。它在shell中輸入時工作。看起來像我的代碼雖然有些問題。 :/ – Nimi 2014-09-02 18:49:34

+0

確保它是一個numpy數組。你甚至可以打印'a> = .05'來進一步瞭解它的工作原理。 – acushner 2014-09-02 19:24:12

2

聽起來好像具有2D陣列(從短語來看,「和同時刪除相應的列」)。

如果創建布爾數組,idx這是真正的爲您希望保留的列,那麼你可以使用arr[:, idx]只選擇那些列:

import numpy as np 
np.set_printoptions(formatter={'float': '{:0.2f}'.format}) 
np.random.seed(1) 

arr = np.random.random((3,4)) 
mask = (arr < 0.05) 
idx = mask.any(axis=0) 
result = arr[:, ~idx] 

print(arr) 
# [[0.42 0.72 0.00 0.30] 
# [0.15 0.09 0.19 0.35] 
# [0.40 0.54 0.42 0.69]] 

print(result) 
# [[0.42 0.72 0.30] 
# [0.15 0.09 0.35] 
# [0.40 0.54 0.69]] 
1

numpy.delete是你的朋友

import numpy as np 

a = np.array([0.5 , 0.3 , 0.1 , 0.05, 0.03, 0.01]) 
a = np.delete(a,np.where(a < 0.05)) 

np.delete(a, 1)將創建副本a,然後從副本中刪除a[1]a仍未受影響。 要強制改變a,做 我們做a = np.delete(a,np.where(a < 0.05))

而且np.delete作品高維數組爲好。 對於高維數據,您必須做更多的工作來選擇正確的np.where