是否有 numpy.where() 的替代方案,不按升序返回列表?

问题描述 投票:0回答:1

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 函数的一部分。

python arrays numpy sorting deep-learning
1个回答
0
投票

您的代码很可能没有按照您的想法行事。

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]

© www.soinside.com 2019 - 2024. All rights reserved.