2014-12-03 165 views
0

我一直在經歷幾種解決方案,但我無法找到我需要的解決方案。我有兩個numpy數組。我們來看一個小例子比較兩個numpy陣列和刪除元素

x = [1,2,3,4,5,6,7,8,9] 
y = [3,4,5] 

我想比較x和y,並刪除那些在y中的x值。

因此,我希望我的final_x是

final_x = [1,2,6,7,8,9] 

我發現np.in1d返回一個布爾值數組的長度相同x就是如此,其中的x元素是y,否則爲假。但是,如果沒有其他方法來獲得我的final_x,我該如何使用它。

回答

2

通過np.in1d返回布爾數組的否定版本簡單地傳遞給數組x

>>> x = np.array([1,2,3,4,5,6,7,8,9]) 
>>> y = [3,4,5] 
>>> x[~np.in1d(x, y)] 
array([1, 2, 6, 7, 8, 9]) 
+0

'〜'是什麼意思? – user3397243 2014-12-03 10:41:31

+1

這意味着否定,例如'[True,False,False]'變成'[False,True,True]' – Matt 2014-12-03 10:42:27

+2

在numpy> = 1.8中,'in1d'有一個'invert'可選關鍵字參數,如果設置爲'True',則返回否定掩碼直接,並且比自己更快地否定它,請參閱[文檔](http://docs.scipy.org/doc/numpy/reference/generated/numpy.in1d.html)。 – Jaime 2014-12-03 12:48:17

3

如果你真的有numpy的陣列,那麼你可以使用numpy.setdiff1d如下

import numpy as np 

x = np.array([1,2,3,4,5,6,7,8,9]) 
y = np.array([3,4,5]) 

z = np.setdiff1d(x, y) 
# array([1, 2, 6, 7, 8, 9]) 
0

您可以使用內置套件:

final_x = set(x) - set(y) 

並從第一個減去第二個。如果您感覺如此傾向,您可以將final_x轉換爲listnumpy.array