gpt4 book ai didi

python - 按重复列值删除行

转载 作者:行者123 更新时间:2023-11-28 21:36:27 26 4
gpt4 key购买 nike

我在 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 列相等。 IE。在上面的矩阵中,响应是:

-4, 5, 9, 30, 50, 80
2, -6, 9, 34, 12, 7
5, -9, 0, 32, 18, 0

numpy.unique 做了一些非常相似的事情,但它只在所有列(轴)上找到重复项。我只想要特定的列。如何使用 numpy 做到这一点?我找不到任何像样的 numpy 算法来做到这一点。有没有更好的模块?

最佳答案

使用 np.uniqueaxis=0 上使用 return_index 参数的切片数组上,这为我们提供了唯一的索引,将每一行视为一个实体。这些索引随后可用于对原始数组进行行索引以获得所需的输出。

因此,以 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]])

关于python - 按重复列值删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50916845/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com