【问题标题】:Merge two numpy arrays and delete duplicates?合并两个numpy数组并删除重复项?
【发布时间】:2018-04-20 22:17:00
【问题描述】:

我有一个 numpy 数组 =

[1,6,7,9,3,5]

还有第二个 numpy 数组 =

[3,5,8,9,2]

我想将这两个数组合并在一起:

[1,6,7,9,3,5,3,5,8,9,2]

然后删除numpy数组中的重复项得到:

[1,6,7,9,3,5,8,2]

我想尽可能多地保留数组 1,并取出数组 2 中没有出现在数组 1 中的元素,并附加这些元素。

我不确定这样做是否更有意义:

  1. 合并两个数组并删除重复项。 或
  2. 遍历数组 2 的元素,如果它们没有出现在数组 1 中,则连接到数组 1。

我尝试过使用各种循环,但这些似乎主要用于列表,我也尝试过使用set(),但这会订购numpy 数组,我想保留随机顺序。

【问题讨论】:

  • 你在乎订单吗?
  • 是的,在这种情况下,数组 1 中值的顺序很重要

标签: python arrays numpy


【解决方案1】:

要加入两个数组,您可以简单地使用np.concatenate

在保留顺序的同时删除重复项有点棘手,因为通常np.unique 也会排序,但您可以使用return_index 然后排序来解决这个问题:

In [61]: x
Out[61]: array([1, 6, 7, 9, 3, 5])

In [62]: y
Out[62]: array([3, 5, 8, 9, 2])

In [63]: z = np.concatenate((x, y))

In [64]: z
Out[64]: array([1, 6, 7, 9, 3, 5, 3, 5, 8, 9, 2])

In [65]: _, i = np.unique(z, return_index=True)

In [66]: z[np.sort(i)]
Out[66]: array([1, 6, 7, 9, 3, 5, 8, 2])

【讨论】:

  • 这太完美了,谢谢!请问in[65]之后的""_、"""是做什么的?
  • 当您使用return_index 时,您会得到一个没有重复的排序列表以及保留的索引。由于我不关心排序列表,所以我只是使用_ 作为一次性变量。
  • 基本上,np.unique() 返回两个结果,我只关心第二个。
  • 我能问你最后一个问题吗?我的数组轴 = 1。我在 concat 函数、 unique 和 sort 函数中指定了 axis=1 。就排序功能而言,它似乎可以工作我收到一个错误:轴 1 超出了维度 1 数组的范围,您对此熟悉吗?
  • 我很惊讶concat 函数在你这样做时会起作用。它为我抛出了这个错误。
【解决方案2】:

这里也有稍微不同的方法:

z = np.concatenate([x, y[~np.isin(y,x)])

【讨论】:

  • 谢谢,这只是连接 y 中尚未在 x 中的元素吗?
猜你喜欢
  • 2017-06-22
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多