删除numpy数组中的重复元组(直接相邻的元组)

时间:2018-06-08 08:38:25

标签: python arrays numpy tuples

我或多或少是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]]])

提前感谢您的支持!

1 个答案:

答案 0 :(得分:2)

沿第二轴获得一次性偏移比较,并使用布尔索引来选择 -

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