【发布时间】:2019-03-26 07:16:40
【问题描述】:
我正在尝试从数组 b 中提取序列,其中布尔数组 a 用作索引(len(a) >= len(b),但 (a==True).sum() == len(b),即有a 中为真的值仅与 b 中的元素一样多)。序列应在结果中表示为 a 的开始和结束索引,其中a[i] 为真,并且存在连续值。
例如,对于以下 a 和 b
的数组a = np.asarray([True, True, False, False, False, True, True, True, False])
b = [1, 2, 3, 4, 5]
结果应该是[((0, 1), [1, 2]), ((5, 7), [3, 4, 5])],因此数组中的元素与真实序列一样多。每个真正的序列都应该包含 a 的开始和结束索引以及这些与 b 相关的值。
所以对于上面的:
[
((0, 1), [1, 2]), # first true sequence: starting at index=0 (in a), ending at index=1, mapping to the values [1, 2] in b
((5, 7), [3, 4, 5]) # second true sequence: starting at index=5, ending at index=7, with values in b=[3, 4, 5]
]
如何在 numpy 中有效地做到这一点?
【问题讨论】:
-
你能举个例子
len(a)>len(b)。我不知道在这种情况下您将如何选择索引,除非 a 中不可索引的 b 中的所有元素都是 False?即b=[0,1,2,3]和a=[True, True, True, False, False, False, False]。 -
谢谢,你是对的。这没有意义。
len(b)实际上只存在于 a 中存在真正元素的情况下。我会更正我的例子和文字。 -
好的,我明白了,奇怪的问题。我想它相对容易使用 for 循环,但您正在寻找更有效的实现。
-
是的,创建一个有效的解决方案就是问题所在。抱歉,要求又变了。我意识到我需要来自 a 的索引以及 b 中的值。
-
@orange 是
numpy一个要求还是一个选项?