我有一个类似的numpy数组:
array([100, 100, 100, 100, 100, 200, 100, 100, 100, 100, 100, 100, 100,
100, 200, 100, 100, 100, 100, 100, 100, 100, 100, 200, 100, 100,
100, 100, 100, 100, 100, 200, 100, 100, 100, 100, 100, 100, 100,
100, 200, 100, 100, 100, 100, 100, 100, 100, 100, 200, 100, 100,
100, 100, 100, 100, 100, 300, 100, 100, 100])
我需要计算连续的'100'个元素的数量。 '100'元素之间的值大于100。
输出应如下所示:
[5,8,8,7,8,8,7,3]
答案 0 :(得分:2)
这是在this帖子中采用@Jaime解决方案的一种方式:
a = np.array([100, 100, 100, 100, 100, 200, 100, 100, 100, 100, 100, 100, 100,
100, 200, 100, 100, 100, 100, 100, 100, 100, 100, 200, 100, 100,
100, 100, 100, 100, 100, 200, 100, 100, 100, 100, 100, 100, 100,
100, 200, 100, 100, 100, 100, 100, 100, 100, 100, 200, 100, 100,
100, 100, 100, 100, 100, 300, 100, 100, 100])
c = a == 100
np.diff(np.where(np.concatenate(([c[0]], c[:-1] != c[1:], [True])))[0])[::2]
# array([5, 8, 8, 7, 8, 8, 7, 3])
答案 1 :(得分:1)
这是一个简单的python脚本:
arr = [100, 100, 100, 100, 100, 200, 100, 100, 100, 100, 100, 100, 100,
100, 200, 100, 100, 100, 100, 100, 100, 100, 100, 200, 100, 100,
100, 100, 100, 100, 100, 200, 100, 100, 100, 100, 100, 100, 100,
100, 200, 100, 100, 100, 100, 100, 100, 100, 100, 200, 100, 100,
100, 100, 100, 100, 100, 300, 100, 100, 100]
check = arr[0]
result = []
count = 0
for el in arr:
if el == check:
count+=1
else:
check = el
if count>1:
result.append(count)
count = 1
result.append(count)
print(result)
[5, 8, 8, 7, 8, 8, 7, 3]
答案 2 :(得分:0)
将numpy数组转换为这样的列表:
a = [100, 100, 100, 100, 100, 200, 100, 100, 100, 100, 100, 100, 100, 100, 200, 100, 100, 100, 100, 100, 100, 100, 100, 200, 100, 100, 100, 100, 100, 100, 100, 200, 100, 100, 100, 100, 100, 100, 100, 100, 200, 100, 100, 100, 100, 100, 100, 100, 100, 200, 100, 100, 100, 100, 100, 100, 100, 300, 100, 100, 100]
尝试:
from itertools import groupby
b = [sum(1 for i in g) for k,g in groupby(a) if k==100]
输出:
b = [5, 8, 8, 7, 8, 8, 7, 3]