Arrays 具有唯一元素的np数组行

Arrays 具有唯一元素的np数组行,arrays,numpy,Arrays,Numpy,考虑下面的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

考虑下面的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]])

这里有一条路-

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 [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]])

具有np.unique的工作答案

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

D[np.array([np.max(np.unique(_,return_counts=True)[-1]) for _ in D])==1]

作为Numpy的新手,我很欣赏这多种方法。你的解决方案非常有效,速度也非常快。但是,我对.sum(1)、any(1)和.all(1)中使用的1参数感到困惑。在每一个例子中,我认为一个单参数必须是数组,在这些例子中,s。这可以解释吗?@user109387这些只是
axis
参数。因此,它们相当于
.sum(axis=1)
,依此类推。这有意义吗?是的,很好。只是我认为数组名参数是必需的。
D[np.array([np.max(np.unique(_,return_counts=True)[-1]) for _ in D])==1]