使用numpy选择排除某些索引的数组中最小值的索引

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

在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

python numpy
1个回答
0
投票

就像是:

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

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