У меня есть 2D-Numpy массив расстояний:Получить индекс для argmin из 2d массива Numpy
a = np.array([[2.0, 12.1, 99.2],
[1.0, 1.1, 1.2],
[1.04, 1.05, 1.5],
[4.1, 4.2, 0.2],
[10.0, 11.0, 12.0],
[3.9, 4.9, 4.99]
])
Мне нужна функция, которая оценивает каждую строку и возвращает индекс столбца для столбца, который имеет наименьшее значение. Конечно, это может быть сделано тривиально, выполнив:
np.argmin(a, axis=1)
, который дает:
[0, 0, 0, 2, 0, 0]
Однако, у меня есть несколько ограничений:
- Оценка argmin следует рассматривать лишь отдаляет ниже значение 5.0. Если ни одно из расстояний в строке не было ниже 5.0, тогда возвратите '-1' в качестве индекса
- Список индексов, возвращаемых для всех строк, должен быть уникальным (т. Е. Если две или несколько строк заканчиваются одним и тем же индексом столбца, тогда строка с меньшим расстоянием до заданного индекса столбца получает приоритет, а все остальные строки должны возвращать другой индекс столбца). Я предполагаю, что это сделает проблему итеративной, поскольку, если одна из строк набит, тогда она может впоследствии столкнуться с другой строкой с тем же индексом столбца.
- Любые нераспределенные строки должен возвращать '-1'
Таким образом, окончательный вывод должен выглядеть следующим образом:
[-1, 0, 1, 2, -1, -1]
Один отправной точки было бы:
- выполнить argsort
- присваивать уникальные индексы колонн
- удалить е присвоены индексы столбцов из каждой строки
- Разрешая тай-брейки
- повторите шаги 2-4 до тех пор, как все индексы столбцов не назначены
Есть ли простой способ сделать это в Python?
Итак, в чем вопрос? – wwii
Как первый элемент ожидаемого o/p a 'nan', учитывая, что первая строка имеет' 2.0' в нем, которая меньше, чем '5.0'? Или вы имеете в виду, что все элементы в строке должны быть меньше, чем '5.0'? – Divakar
Я не согласен с вашим новым ожидаемым выходом. В строке '3' столбец' 2' наименьший ('0,2'), но у вас есть' 'np.argmin (a, 1)' is '1', даже без ваших ограничений. Для новых 'a',' np.argmin (a, 1) 'дает' array ([0, 0, 0, 2, 0, 0]) ', поэтому окончательный вывод должен быть' array ([-1, 0, -1, 2, -1, -1]) ', я думаю. – askewchan