2012-11-02 178 views
3

我需要找到一個numpy數組是否在其他numpy數組內,但它似乎與python列表不同。 我試圖在numpy文檔和互聯網中搜索這個問題,但沒有回答。 這是一個例子:在numpy數組內搜索numpy數組

import numpy as np

m1=np.array([[1,2,3],[5,3,4]]) 
m2=np.array([5,4,3]) 
m2 in m1 
True 
m3=[[1,2,3],[5,3,4]] 
m4=[5,4,3] 
m4 in m3 
False 

在numpy的我獲得真正的,但與Python列表我獲得假。有沒有任何numpy功能來完成這項工作?

謝謝。

+0

是否有拼寫錯誤?你的意思是'm3 = [[1,2,3],[5,4,3]]'代替'm3 = [[1,2,3],[5,3,4]]''。 –

回答

3

要獲得相同的行爲in的列表,你可以做這樣的事情:

any(np.all(row == m2) for row in m1) 

那請問python中遍歷行,這是不理想的,但它應該工作。

要明白是怎麼回事了numpy的in,這裏有infrom Robert Kern on the numpy mailing list語義的描述:

它可以追溯到數字的語義布爾(some_array),這將 是真,如果任何的元素不爲零。就像在Python任何其他 迭代的容器,x in y將主要做

for row in y: 
    if x == row: 
     return True 
return False 

沿y的第一軸迭代和布爾相等比較。在 數字/ numpy的情況下,廣播這個比較。所以這就是爲什麼 [3,6,4]有效,因爲在第一個 列中有3行。 [4,2,345]不起作用,因爲4和2不在 那些列中。

也許,在轉換到 numpy的bool(some_array)引發異常的語義中,這應該被認爲是一個錯誤。 scalar in array應該可以按照ND數組原樣工作,但 對於array in array 有幾種不同的可能語義,應該明確說明,很像bool(some_array)。