1

考虑下面的 numpy 数组。我希望找到一种快速的方法来删除没有 4 个不同值的行。

import numpy as np

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

在小样本数组显示中,输出应为:

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

4

2 回答 2

1

这是一种方法 -

In [94]: s = np.sort(D,axis=1)

In [95]: D[(s[:,:-1] == s[:,1:]).sum(1) ==0]
Out[95]: 
array([[2, 3, 6, 7],
       [4, 9, 0, 1],
       [7, 5, 4, 8]])

或者 -

In [107]: D[~(s[:,:-1] == s[:,1:]).any(1)]
Out[107]: 
array([[2, 3, 6, 7],
       [4, 9, 0, 1],
       [7, 5, 4, 8]])

或者 -

In [112]: D[(s[:,:-1] != s[:,1:]).all(1)]
Out[112]: 
array([[2, 3, 6, 7],
       [4, 9, 0, 1],
       [7, 5, 4, 8]])

与熊猫 -

In [121]: import pandas as pd

In [122]: D[pd.DataFrame(D).nunique(1)==4]
Out[122]: 
array([[2, 3, 6, 7],
       [4, 9, 0, 1],
       [7, 5, 4, 8]])
于 2020-08-30T18:04:01.457 回答
0

np.unique 的有效答案

我发现没有办法在 np.unique 中使用轴关键字来摆脱列表压缩,也许有人可以帮忙?

D[np.array([np.max(np.unique(_,return_counts=True)[-1]) for _ in D])==1]
于 2020-08-30T19:00:48.570 回答