【发布时间】:2020-11-21 06:34:31
【问题描述】:
这可能是一个简单的问题,但我被这个问题困住了,我发现的解决方案效率不高(我认为)。
假设我有两个 numpy 数组,一个包含每个位置的索引,第二个包含有效索引:
import numpy as np
x = np.array([0, 1, 2, 1, 3, 2])
indices = np.array([True, True, False, False])
我想获得一个布尔数组,指示第一个数组中的值与第二个数组中包含的值相同的位置。我提到的效率不高的解决方案是:
indices2 = np.where(indices)[0]
y1 = (x == indices2[0]) | (x == indices2[1])
y2 = np.zeros_like(x, dtype=bool)
for i in indices2:
y2 = (x == i) | y2
np.all(y2 == y1)
是的
y1
数组([真、真、假、真、假、假])
那么,有没有更高效、更 numpy 风格的方法来实现这一点(例如,没有 for 循环)?
编辑:
更正了一些错误并将示例替换为 cmets 中提到的较小的示例。
【问题讨论】:
-
(1) 为了演示,请将
x缩小很多,比如5个值,这样容易理解。 (2) 为什么这不仅仅是x1 == x2? (3) 如果您的问题中的第一个数组是x,那么第二个数组是什么?是indices吗?因为x中的值都不在indices中,因为它们具有不同的类型。 -
indices[x]呢? -
那么你是问如何使用
x来索引indices? -
@Roberto:嗯,这似乎行得通。我期待一个简洁的答案,但这比所有都好!