【问题标题】:Remove duplicate tuples in numpy array (ones directly next to each other)删除 numpy 数组中的重复元组(直接相邻的元组)
【发布时间】:2018-06-08 08:38:24
【问题描述】:

我或多或少是 python/numpy 的新手,我遇到了这个问题:

我有 numpy 数组,其中第一个和最后一个元组总是相同的。在这两者之间,有时我想删除重复的元组(只有直接相邻的元组)。应保留使用的括号结构。

我已经尝试过np.unique(例如12),但它改变了我原来的顺序(必须保持)。我的示例数组如下所示:

    myarray = np.array([[[1,1],[1,1],[4,4],[4,4],[2,2],[3,3],[1,1]]])

我需要一个看起来像这样的结果:

    myarray = np.array([[[1,1],[4,4],[2,2],[3,3],[1,1]]])

提前感谢您的支持!

【问题讨论】:

  • 我认为您的问题已经在这里得到解答:stackoverflow.com/questions/31097247/…
  • OP 需要保留原始顺序,np.unique() 不会这样做。
  • @VanDeWack In between, there are sometimes duplicate tuples (only the **ones directly next to each other)**.
  • @SBylemans 同样,链接的问答不处理直接相邻的)标准。

标签: python arrays numpy tuples


【解决方案1】:

获取沿第二个轴的一次性偏移比较并使用布尔索引选择 -

myarray[:,np.r_[True,(myarray[0,1:] != myarray[0,:-1]).any(-1)]]

示例运行 -

In [42]: myarray
Out[42]: 
array([[[1, 1],
        [1, 1],
        [4, 4],
        [4, 4],
        [2, 2],
        [3, 3],
        [1, 1]]])

In [43]: myarray[:,np.r_[True,(myarray[0,1:] != myarray[0,:-1]).any(-1)]]
Out[43]: 
array([[[1, 1],
        [4, 4],
        [2, 2],
        [3, 3],
        [1, 1]]])

或者用相等比较然后寻找ALL匹配-

In [47]: myarray[:,np.r_[True,~((myarray[0,1:] == myarray[0,:-1]).all(-1))]]
Out[47]: 
array([[[1, 1],
        [4, 4],
        [2, 2],
        [3, 3],
        [1, 1]]])

【讨论】:

  • 是的,这正是我需要的解决方案。两个版本都适合我,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-07
  • 2019-03-29
  • 2019-03-29
  • 1970-01-01
  • 2012-09-18
相关资源
最近更新 更多