计算numpy数组中的元素连续满足条件的次数

时间:2019-07-03 16:47:17

标签: python numpy

我有一个numpy数组,如下所示:

import numpy as np
a = np.array([1, 4, 2, 6, 4, 4, 6, 2, 7, 6, 2, 8, 9, 3, 6, 3, 4, 4, 5, 8])

和常数b=6

我正在搜索一个数字c,该数字由a中的元素连续两次小于b的次数定义。

因此在此示例中,c=3

我没有有效的代码,这就是为什么我在这里问这个问题。基于previous question,我可以使用np.sum(a<b)来获得a<b的次数。

print(np.sum(a<b))
#12

现在,我想计算a连续小于b两次或以上的次数。

以下是此示例a中3个组的说明:

1, 4, 2, 6, 4, 4, 6, 2, 7, 6, 2, 8, 9, 3, 6, 3, 4, 4, 5, 8  # numbers in a
1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0  # (a<b)
^^^^^^^-----^^^^-----------------------------^^^^^^^^^^---  # (a<b) 2+ times consecutively
   1         2                                    3

1 个答案:

答案 0 :(得分:2)

您可以使用numpy遮罩和itertools.groupby

from itertools import groupby

b = 6
sum(len(list(g))>=2 for i, g in groupby(a < b) if i)
#3