我有一个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
在前一个问题的基础上,我可以连续地计数由a
中的元素小于b
2或更多的次数定义的数字c
。
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工具,以便输出满足我条件的不同数组吗?
发布于 2019-07-04 12:49:48
使用groupby
并抓取组:
from itertools import groupby
lst = []
b = 6
for i, g in groupby(a, key=lambda x: x < b):
grp = list(g)
if i and len(grp) >= 2:
lst.append(grp)
print(lst)
# [[1, 4, 2], [4, 4], [3, 4, 4, 5]]
https://stackoverflow.com/questions/56888201
复制相似问题