我在numpy.ndarray中有一个类似于以下内容的大型数据集:
array([[ -4, 5, 9, 30, 50, 80],
[ 2, -6, 9, 34, 12, 7],
[ -4, 5, 9, 98, -21, 80],
[ 5, -9, 0, 32, 18, 0]])我想删除重复行,其中第0、第1、第2和第5列相等。例如,在上述矩阵表中,答复如下:
-4, 5, 9, 30, 50, 80
2, -6, 9, 34, 12, 7
5, -9, 0, 32, 18, 0numpy.unique做一些非常类似的事情,但它只在所有列(轴)上找到重复。我只想要特定的专栏。如何才能在numpy中做到这一点呢?我找不到合适的numpy算法来做这件事。有更好的模块吗?
发布于 2018-06-18 20:20:58
在切片数组上使用np.unique,return_index param优于axis=0,这为我们提供了唯一的索引,将每一行看作一个实体。然后,可以使用这些索引对原始数组进行行索引,以获得所需的输出。
因此,以a作为输入数组,它将是-
a[np.unique(a[:,[0,1,2,5]],return_index=True,axis=0)[1]]试运行来分解步骤,希望能把事情弄清楚-
In [29]: a
Out[29]:
array([[ -4, 5, 9, 30, 50, 80],
[ 2, -6, 9, 34, 12, 7],
[ -4, 5, 9, 98, -21, 80],
[ 5, -9, 0, 32, 18, 0]])
In [30]: a_slice = a[:,[0,1,2,5]]
In [31]: _, unq_row_indices = np.unique(a_slice,return_index=True,axis=0)
In [32]: final_output = a[unq_row_indices]
In [33]: final_output
Out[33]:
array([[-4, 5, 9, 30, 50, 80],
[ 2, -6, 9, 34, 12, 7],
[ 5, -9, 0, 32, 18, 0]])https://stackoverflow.com/questions/50916845
复制相似问题