首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >根据条件获取NumPy数组的连续元素组

根据条件获取NumPy数组的连续元素组
EN

Stack Overflow用户
提问于 2019-07-04 12:41:56
回答 1查看 1.8K关注 0票数 4

我有一个NumPy数组如下:

代码语言:javascript
代码运行次数:0
运行
复制
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

代码语言:javascript
代码运行次数:0
运行
复制
from itertools import groupby
b = 6
sum(len(list(g))>=2 for i, g in groupby(a < b) if i)

所以在这个例子中,c == 3

现在,我希望每次满足条件时输出一个数组,而不是计算满足条件的次数。

因此,对于这个示例,正确的输出应该是:

代码语言:javascript
代码运行次数:0
运行
复制
array1 = [1, 4, 2]
array2 = [4, 4]
array3 = [3, 4, 4, 5]

因为:

代码语言:javascript
代码运行次数:0
运行
复制
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

到目前为止,我已经尝试了不同的选择:

代码语言:javascript
代码运行次数:0
运行
复制
np.isin((len(list(g))>=2 for i, g in groupby(a < b)if i), a)

代码语言:javascript
代码运行次数:0
运行
复制
np.extract((len(list(g))>=2 for i, g in groupby(a < b)if i), a)

但他们都没有达到我正在寻找的目标。有人能告诉我正确的Python工具,以便输出满足我条件的不同数组吗?

EN

回答 1

Stack Overflow用户

发布于 2019-07-04 12:49:48

使用groupby并抓取组:

代码语言:javascript
代码运行次数:0
运行
复制
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]]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56888201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档