我有一个数组,
第一个月
和一个大小相同的布尔数组(所以这是一个掩码),如boo = np.array[ True, True, False, False, True, True, True, False, True]
个
(boo
也可以以False
作为第一个条目开始.)
现在我想把a
拆分成新的数组,有两个条件:
- 一个新的子数组只包含
boo
中的True
值 - 新的子阵列总是在
False
之后开始,并在False
之前结束。
所以结果是[[4, 9], [6, 4, 7], [2]]
我的想法是:
我知道我可以使用np.split
作为基本的。
在这种情况下,它将是b = np.split(a, [2, 4, 7, 8]
,然后我将只从b
中取出第二个元素,从第一个开始,因为boo
中的第一个元素是True
。
那么我的问题是:如何得到数组[2, 4, 7, 8]
?
(使用python循环不是一个选择,因为它太慢了。
2条答案
按热度按时间agyaoht71#
也许这足够快:
字符串
找到一个更简单、更快捷的方法:
型
比较切片的速度至少是
np.roll()
加上if语句的两倍。此外,
np.flatnonzero(...)
看起来比np.nonzero(...)[0]
更好,但稍慢。ycl3bljg2#
总结一下最佳解决方案:
字符串
结果如下:
型
这也适用于零长度数组和布尔掩码。