numpy.where() 函数将始终返回按升序排列的列表。我使用它从列表中的值获取索引,这些值在另一个列表中找到,如下所示:
lst = [1, 2, 8, 7, 3, 4, 6, 5]
values = [4, 8]
indices = np.where(np.isin(lst, values))
输出是
[2,5]
而不是预期的 [5,2]
。
问题是我需要它按照找到值的顺序返回索引。因此,在我的示例中,4 是第一个值,因此与其对应的索引 (5) 应位于输出中的第一个值,但事实并非如此。 numpy.where() 函数是否有替代方法来保持顺序而不是对其进行排序?我可以简单地使用一些 for 循环和基本索引来解决这个问题,但速度非常重要,因为这是我用于神经网络的自定义 2d Max Pool 函数的一部分。
您的代码很可能没有按照您的想法行事。
np.isin(lst, values)
返回布尔数组:
array([False, False, True, False, False, True, False, False])
因此,
np.where(np.isin(lst, values))
仅计算数组中的False
/True
(即不匹配/匹配的数量),这完全独立于4
和8
在中找到的顺序数组。
事实上,您可以按照自己想要的方式随机排列输入列表,结果始终是
[5, 2]
。