Используя numpy, выберите индекс минимального значения в массиве, исключая определенные индексы. - PullRequest
0 голосов
/ 27 марта 2019

В numpy я пытаюсь извлечь минимальное расстояние до города.

Расстояния - это одна строка в матрице, например,

[50,33,66,55]  

toVisit - это одна строка минус посещенные индексы, например,

visitedIndices = [0,3]  
toVisit = [33,66]

Эта строка кода получает индекс минимального значения в toVisit.

city = np.where(distances == toVisit.min())[0][0]

Проблема возникает, если для расстояний задано дублирующее значение для расстояния, так как 2 индекса будут возвращены этимстрока кода.Я хочу исключить возможность возврата каких-либо индексов, которые мы посетили ранее.

Я мог бы добавить что-нибудь, чтобы проверить, посещался ли индекс впоследствии aka:

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

1 Ответ

0 голосов
/ 27 марта 2019

Что-то вроде:

my_array = ...
mask = my_array > some_condition
argsort = np.argsort(my_array)
min_index_in_mask = np.min( argsort[mask))

Сложность O (n log (n)) с n размером my_array, из-за np.argsort.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...