【发布时间】:2019-07-05 21:58:16
【问题描述】:
我有一个如下的 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
基于previous question,我可以计算c 的数量,该数量由a 中的元素连续2 次或多次小于b 的次数定义。
from itertools import groupby
b = 6
sum(len(list(g))>=2 for i, g in groupby(a < b) if i)
所以在这个例子中c == 3
现在我想在每次满足条件时输出一个数组,而不是计算满足条件的次数。
所以对于这个例子,正确的输出应该是:
array1 = [1, 4, 2]
array2 = [4, 4]
array3 = [3, 4, 4, 5]
因为:
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
到目前为止,我尝试了不同的选择:
np.isin((len(list(g))>=2 for i, g in groupby(a < b)if i), a)
和
np.extract((len(list(g))>=2 for i, g in groupby(a < b)if i), a)
但他们都没有达到我正在寻找的目标。有人可以为我指出正确的 Python 工具以输出满足我条件的不同数组吗?
【问题讨论】:
标签: python arrays numpy grouping