2014-10-12 27 views
0

我想從2d numpy數組中刪除特定的字符。例如:從2d numpy數組中刪除元素而不會丟失結構

myarr = np.array([[2,"?",5,2,3,6,8],[6,7,8,9,"?"]]) 

如何刪除「?」沒有失去陣列的結構?我的結果應該是這樣的:

[[2,5,2,3,6,8] 
    [6,7,8,9]] 

(我是Win7的機器上使用Python 3.4.2和numpy的1.9)

回答

2

myarr = np.array([[2,"?",5,2,3,6,8],[6,7,8,9,"?"]])產生

array([[2, '?', 5, 2, 3, 6, 8], [6, 7, 8, 9, '?']], dtype=object) 

也就是說的2項object類型的陣列。沒有一個「結構」。這與列表清單基本相同

mylist = [[2, '?', 5, 2, 3, 6, 8], [6, 7, 8, 9, '?']] 

一種簡單的方法可以刪除'?'是:

for l in mylist: 
    l.remove('?') 

但是,如果沒有任何「?」,這會引發ValueError。在子列表中,並且如果存在多個,則不會刪除全部。這兩種錯誤都可以通過編寫一個計算出現次數的小函數來解決,並刪除正確的數字。你能處理那個功能嗎?

所以問題歸結爲從列表(或列表數組)列表中刪除選定的元素。


的「刪除所有」功能,比我想象的簡單:

def remove_all(a,x): 
    while x in a: 
     a.remove(x) 
for a in myarr: 
    a.remove_all('?') 
+0

謝謝你指出這一點。我剛剛開始使用numpy,並沒有意識到代碼中的列表/數組混亂。 – roschu 2014-10-14 06:18:09

2

numpy的陣列必須是「矩形」,即,所有的行/列必須有相同的長度。你的例子看起來像你需要一個「鋸齒狀數組」,numpy不支持。

如果這僅僅是一個糟糕的例子,你可以刪除?通過選擇所有非?元素:

result = myarr[myarr!='?'] 
+0

如果numpy的是不支持這個,有什麼在上面的例子做「myArr,該」表示,爲什麼我得到沒有錯誤消息當使用np不支持的np.array()命令構造對象時? – roschu 2014-10-13 05:45:44

相關問題