使用numpy选择排除某些索引的数组中最小值的索引
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用numpy选择排除某些索引的数组中最小值的索引相关的知识,希望对你有一定的参考价值。
在numpy我试图提取到城市的最小距离。
距离是矩阵中的一行,例如
[50,33,66,55]
toVisit是一行减去访问的索引,例如
visitedIndices = [0,3]
toVisit = [33,66]
这行代码获取Visit中最小值的索引。
city = np.where(distances == toVisit.min())[0][0]
如果距离具有重复的距离值,则会出现问题,因为该行代码将返回2个索引。我想排除我们之前访问过的任何索引返回的可能性。
我可以添加一些东西来检查索引是否已被访问后来又称:
city = np.where(distances == toVisit.min())[0]
for index in city:
if index not in visited:
city = index
但肯定有一种方法可以在where子句中执行此操作吗?
编辑:如果您运行此:
distances = [20, 36, 55, 36]
visited = [0, 1]
toVisit = [55, 36]
city = np.where(distances == toVisit.min())[0]
city将等于两个索引1和3,因为我们之前访问过索引1,我希望排除该索引出现在以下结果中:
city = np.where(distances == toVisit.min())[0]
因此,城市将等于指数3
答案
就像是:
my_array = ...
mask = my_array > some_condition
argsort = np.argsort(my_array)
min_index_in_mask = np.min( argsort[mask))
由于n
,复杂度为O(n log(n)),其中my_array
的大小为np.argsort
。
以上是关于使用numpy选择排除某些索引的数组中最小值的索引的主要内容,如果未能解决你的问题,请参考以下文章
在 1D NumPy 数组中查找值的索引/位置(具有相同的值)[重复]
Python | 快速获取某一列数组中前 N 个最大值/最小值的索引 | 三种方法总结