gpt4 book ai didi

python - Numpy:根据满足条件的组拆分数组

转载 作者:行者123 更新时间:2023-11-28 22:18:39 24 4
gpt4 key购买 nike

我正在尝试将一个 numpy 数组拆分成符合特定条件的 block 。例如,给定 a = np.array([ 1, 2, 3, 4, 10, 9, 8, 7, 7, 7, 8, 9, 10])返回 [array([3, 4]), array([7, 7, 7])]因为这些 block 符合条件 np.logical_and(a>2,a<8) .

我提出的解决方案可行,但感觉很尴尬,因为我首先应用条件来拆分数组,然后再次选择我想要的结果。

import numpy as np
a = np.array([ 1, 2, 3, 4, 10, 9, 8, 7, 7, 7, 8, 9, 10])
cond = np.logical_and(a>2,a<8)
splits = np.split(a,np.where(np.diff(cond))[0]+1)
# this yields [array([1, 2]), array([3, 4]), array([10, 9, 8]), array([7, 7, 7]), array([ 8, 9, 10])]
result = [x for x in splits if np.logical_and(x>2,x<8).any()]
# [array([3, 4]), array([7, 7, 7])]

有没有办法对两者应用相同的条件,这样如果我想更改条件,我可以在我的代码中更改一次而不是两次?还是我让事情变得过于复杂,而有更简单、更 pythonic 的方法可以做到这一点?

最佳答案

这是一个选项,在拆分之前对数组进行子集化以消除 for 循环:

cond = (a > 2) & (a < 8)
np.split(a[cond], np.where(np.diff(np.where(cond)[0]) > 1)[0] + 1)
# [array([3, 4]), array([7, 7, 7])]

关于python - Numpy:根据满足条件的组拆分数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50322276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com