4
在numpy中,如果所有行在二維數組中都不同,是否有一種很好的慣用測試方法?如何測試所有行在numpy中是否不同
我想我可以做
len(np.unique(arr)) == len(arr)
但是這並不在所有的工作。例如,
arr = np.array([[1,2,3],[1,2,4]])
np.unique(arr)
Out[4]: array([1, 2, 3, 4])
在numpy中,如果所有行在二維數組中都不同,是否有一種很好的慣用測試方法?如何測試所有行在numpy中是否不同
我想我可以做
len(np.unique(arr)) == len(arr)
但是這並不在所有的工作。例如,
arr = np.array([[1,2,3],[1,2,4]])
np.unique(arr)
Out[4]: array([1, 2, 3, 4])
就可以計算出相關矩陣,並詢問是否僅對角線元素被1
:如果你想要做類似的事情列
(np.corrcoef(M)==1).sum()==M.shape[0]
In [66]:
M = np.random.random((5,8))
In [72]:
(np.corrcoef(M)==1).sum()==M.shape[0]
Out[72]:
True
此:
(np.corrcoef(M, rowvar=0)==1).sum()==M.shape[1]
或根本沒有numpy
:
len(set(map(tuple,M)))==len(M)
Fiter出唯一的行,然後進行測試,如果得到的是相同M
是矯枉過正:
In [99]:
%%timeit
b = np.ascontiguousarray(M).view(np.dtype((np.void, M.dtype.itemsize * M.shape[1])))
_, idx = np.unique(b, return_index=True)
unique_M = M[idx]
unique_M.shape==M.shape
10000 loops, best of 3: 54.6 µs per loop
In [100]:
%timeit len(set(map(tuple,M)))==len(M)
10000 loops, best of 3: 24.9 µs per loop
非常感謝你。令人驚訝的是,非numpy的方式是最快的。它不需要轉換numpy數組 - >元組 - > set? – eleanora 2014-10-03 08:07:18
注:http://stackoverflow.com/questions/16970982/find-unique- row-in-numpy-array是關於查找唯一行的,OP是關於TESTING行是否都是唯一的。不同的問題。 – 2014-10-02 17:10:18
有關如何刪除非唯一行/列的幾個有趣答案:http://mail.scipy.org/pipermail/scipy-user/2011-December/031193.html。然後您可以看到縮小的數組是否與原始數組相同。如果你使用熊貓,有一個有效的實施來做這樣的事情。 – wflynny 2014-10-02 17:15:30
@GWW朱主任指出這不是問題的不同嗎? – eleanora 2014-10-02 17:53:00