Python 对数组中的连续相等值进行计数

Python 对数组中的连续相等值进行计数,python,arrays,numpy,Python,Arrays,Numpy,假设我有以下numpy数组: a = np.array([1,5,5,2,3,6,5,2,5,5,5]) 我试图想出一个numpy解决方案来计算给定值连续出现的次数。例如,对于数字5,我想得到: array([2,1,3]) 因为它在数组中连续出现3次,每次都有指定的重复次数。如果您同意列表,则可以使用groupby from itertools import groupby a=[1,5,5,2,3,6,5,2,5,5,5] [len(list(v)) for k,v in groupby

假设我有以下
numpy
数组:

a = np.array([1,5,5,2,3,6,5,2,5,5,5])
我试图想出一个
numpy
解决方案来计算给定值连续出现的次数。例如,对于数字
5
,我想得到:

array([2,1,3])

因为它在数组中连续出现3次,每次都有指定的重复次数。

如果您同意
列表
,则可以使用groupby

from itertools import groupby
a=[1,5,5,2,3,6,5,2,5,5,5]
[len(list(v)) for k,v in groupby(a) if k==5]
输出

[2, 1, 3]

以下是一个改编自:


是的,我知道
itertools.groupby
。确实在寻找一个小的,但谢天谢地,它确实可以被改编:
[sum(1表示组中的)表示键,组在itertools中。groupby(a)如果键==5]
groupby还有另一个答案。。。就像我已经说过的,我在找一个裸体的。我提到的是另一个。是的,对不起,刚才看到评论中的问题,说其他答案可以修改(你可以用这个列表构建一个新的数组),不一定是你想要的,但是可以做到。:)
def count_consecutive(arr, n):
    # pad a with False at both sides for edge cases when array starts or ends with n
    d = np.diff(np.concatenate(([False], arr == n, [False])).astype(int))
    # subtract indices when value changes from False to True from indices where value changes from True to False
    return np.flatnonzero(d == -1) - np.flatnonzero(d == 1)

count_consecutive(a, 5)
# array([2, 1, 3])