2015-09-28 154 views
3

讓我們說我有一個數字的數組(例如:整數)。我想在序列中發生的任何地方都刪除數字k。目前我正在爲此寫一個for循環,這似乎是一個矯枉過正的問題。有沒有一個簡單的方法來做到這一點?一般來說,如果我有一個以上的號碼被丟棄,該怎麼辦?從numpy數組中刪除數字

+1

難道你不能簡單地使用'a [a!= ]'? –

+0

是的,我可以做到這一點。它確保訂單得到保留嗎? – dineshdileep

+0

是的,它應該以相同的順序返回元素。 –

回答

5

假設A到輸入陣列和B爲要除去含有的數字陣列,可以使用np.in1d得到的B匹配的掩模在A,然後使用掩模的反相版本映射A和獲得所需的輸出。下面是執行會是什麼樣子 -

A[~np.in1d(A,B).reshape(A.shape)] 

採樣運行 -

In [14]: A 
Out[14]: array([3, 2, 1, 4, 3, 3, 2, 2, 4, 1]) 
In [15]: B 
Out[15]: array([2, 4]) 

In [16]: A[~np.in1d(A,B).reshape(A.shape)] 
Out[16]: array([3, 1, 3, 3, 1]) 

對於二維輸入數組的情況下,你會得到一維數組作爲輸出,就像這樣 -

In [21]: A 
Out[21]: 
array([[3, 3, 3, 4, 0, 4], 
     [2, 4, 4, 4, 4, 3], 
     [1, 2, 4, 4, 3, 1], 
     [0, 3, 1, 4, 1, 1]]) 

In [22]: B 
Out[22]: array([2, 4]) 

In [23]: A[~np.in1d(A,B).reshape(A.shape)] 
Out[23]: array([3, 3, 3, 0, 3, 1, 3, 1, 0, 3, 1, 1, 1]) 
3

如果您嘗試檢查單個標量值。在numpy中,當您將向量與標量值進行比較時,會返回一個數組True/False值,其中每個元素指示標量值與元素的比較結果。示例 -

In [15]: a = np.random.randint(10,100, (100,)) 

In [16]: a 
Out[16]: 
array([63, 19, 84, 89, 89, 76, 18, 16, 57, 65, 25, 31, 17, 20, 25, 14, 27, 
     70, 79, 87, 82, 59, 50, 86, 20, 42, 81, 58, 32, 23, 68, 12, 19, 98, 
     11, 90, 76, 55, 40, 66, 83, 64, 46, 65, 94, 64, 91, 89, 18, 44, 59, 
     52, 51, 22, 32, 94, 88, 38, 31, 91, 47, 76, 62, 43, 89, 41, 76, 81, 
     50, 53, 76, 97, 49, 91, 39, 81, 52, 94, 21, 77, 94, 96, 28, 57, 38, 
     10, 55, 57, 55, 41, 15, 14, 91, 69, 80, 43, 83, 31, 21, 76]) 

In [17]: a != 15 
Out[17]: 
array([ True, True, True, True, True, True, True, True, True, 
     True, True, True, True, True, True, True, True, True, 
     True, True, True, True, True, True, True, True, True, 
     True, True, True, True, True, True, True, True, True, 
     True, True, True, True, True, True, True, True, True, 
     True, True, True, True, True, True, True, True, True, 
     True, True, True, True, True, True, True, True, True, 
     True, True, True, True, True, True, True, True, True, 
     True, True, True, True, True, True, True, True, True, 
     True, True, True, True, True, True, True, True, True, 
     False, True, True, True, True, True, True, True, True, True], dtype=bool) 

然後你就可以使用這個bool陣列,索引你的原數組,這將返回值放回原處索引陣列具有True,這是Boolean array indexing一部分。示例 -

In [18]: a[a != 15] 
Out[18]: 
array([63, 19, 84, 89, 89, 76, 18, 16, 57, 65, 25, 31, 17, 20, 25, 14, 27, 
     70, 79, 87, 82, 59, 50, 86, 20, 42, 81, 58, 32, 23, 68, 12, 19, 98, 
     11, 90, 76, 55, 40, 66, 83, 64, 46, 65, 94, 64, 91, 89, 18, 44, 59, 
     52, 51, 22, 32, 94, 88, 38, 31, 91, 47, 76, 62, 43, 89, 41, 76, 81, 
     50, 53, 76, 97, 49, 91, 39, 81, 52, 94, 21, 77, 94, 96, 28, 57, 38, 
     10, 55, 57, 55, 41, 14, 91, 69, 80, 43, 83, 31, 21, 76])