使用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 个最大值/最小值的索引 | 三种方法总结

Python | 快速获取某一列数组中前 N 个最大值/最小值的索引 | 三种方法总结

在 numpy 数组中查找多个值的行索引

如何获取numpy数组中所有NaN值的索引列表?

Python numpy数组对某些索引求和