在 numpy 中,是否有一种很好的惯用方法来测试二维数组中的所有行是否不同?
我以为我能做到
len(np.unique(arr)) == len(arr)
Run Code Online (Sandbox Code Playgroud)
但这根本不起作用。例如,
arr = np.array([[1,2,3],[1,2,4]])
np.unique(arr)
Out[4]: array([1, 2, 3, 4])
Run Code Online (Sandbox Code Playgroud)
您可以计算相关矩阵并询问是否只有对角线元素1:
(np.corrcoef(M)==1).sum()==M.shape[0]\n\n\nIn [66]:\n\nM = np.random.random((5,8))\nIn [72]:\n\n(np.corrcoef(M)==1).sum()==M.shape[0]\nOut[72]:\nTrue\nRun Code Online (Sandbox Code Playgroud)\n\n如果您想对列执行类似的操作,请执行以下操作:
\n\n(np.corrcoef(M, rowvar=0)==1).sum()==M.shape[1]
或numpy根本没有:
len(set(map(tuple,M)))==len(M)\nRun Code Online (Sandbox Code Playgroud)\n\n筛选出唯一的行,然后测试结果是否与M过度杀伤相同:
In [99]:\n\n%%timeit\n\nb = np.ascontiguousarray(M).view(np.dtype((np.void, M.dtype.itemsize * M.shape[1])))\n_, idx = np.unique(b, return_index=True)\n\nunique_M = M[idx]\n\nunique_M.shape==M.shape\n10000 loops, best of 3: 54.6 \xc2\xb5s per loop\nIn [100]:\n\n%timeit len(set(map(tuple,M)))==len(M)\n10000 loops, best of 3: 24.9 \xc2\xb5s per loop\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1115 次 |
| 最近记录: |