Numpy 如果值在数组中重复,则删除它们

Numpy 如果值在数组中重复,则删除它们,numpy,Numpy,我有一个类似的数组 [0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,0] 我想确定非零间隔的数量。当然,我知道如何在for循环中做到这一点,但我想知道是否有一个很好的numpy解决方案 我正在寻找的方法是假设每当一个值自身重复时就“折叠”数组。因此,上面的数组将成为示例 [0,1,0,1,0] 为了计算的缘故,只返回一次就足够了 [1,1] 但是我想知道一种通用的方法,它也可以处理两个以上不同的元素,比如 [1,1,1,2,2,2,3,3,0,0,1,1,2,2] 大约如此

我有一个类似的数组

[0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,0]
我想确定非零间隔的数量。当然,我知道如何在for循环中做到这一点,但我想知道是否有一个很好的
numpy
解决方案

我正在寻找的方法是假设每当一个值自身重复时就“折叠”数组。因此,上面的数组将成为示例

[0,1,0,1,0]
为了计算的缘故,只返回一次就足够了

[1,1]
但是我想知道一种通用的方法,它也可以处理两个以上不同的元素,比如

[1,1,1,2,2,2,3,3,0,0,1,1,2,2]

大约如此。

一个选项是在布尔索引发生更改时拾取值:

import numpy as np
a = np.array([1,1,1,2,2,2,3,3,0,0,1,1,2,2])

a[np.concatenate(([True], np.diff(a) != 0))]
# array([1, 2, 3, 0, 1, 2])

np.count_nonzero(a[np.concatenate(([True], np.diff(a) != 0))])
# 5
第一种情况:

b = np.array([0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,0])
​
b[np.concatenate(([True], np.diff(b) != 0))]
# array([0, 1, 0, 1, 0])

np.count_nonzero(b[np.concatenate(([True], np.diff(b) != 0))])
# 2