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