【发布时间】:2016-08-30 04:26:16
【问题描述】:
我有一个numpy数组,例如:
a = np.array([[1,2],
[3,4],
[6,4],
[5,3],
[3,5]])
我也有一套
b = set((1,2),(6,4),(9,9))
我想找到存在于集合 b 中的向量的索引,这里是
[0, 2]
但我使用 for 循环来实现这一点,有没有一种方便的方法可以避免 for 循环? 我使用的for循环方法:
record = []
for i in range(a.shape[0]):
if (a[i, 0], a[i, 1]) in b:
record.append(i)
【问题讨论】:
-
作为列表理解...您可以将其解压缩以使其更具可读性... np.vstack([a[np.sum(np.where(a == i, 1, 0 ), axis=1) == 2] for i in b]) ... 但基本上你想找出 b 中的条目在 a 中的位置,当 b 更改为数组时 b = np.array([ (1,2),(6,4)])
-
该集合中的所有元素是否都保证在
a中的某个位置? -
@Divakar 不,它没有
-
所以,假设输入集中还有一个元素
(9,9)。那么输出必须是什么?为什么不在问题的示例中添加这样的案例? -
@Divakar 它不会改变答案。我已经更新了这个问题。但我不知道为什么它很重要?
标签: python numpy set vectorization lookup