#python #arrays #matlab #numpy
#python #массивы #matlab #numpy
Вопрос:
Я хочу достичь того же результата с наименьшей сложностью в python, что и min(Ar(Ar~=0))
в MATLAB, где Ar
это 2D массив numpy.
Для тех, кто не знаком с MATLAB, ~=
означает !=
или не равно.
Есть ли функция в python, которая возвращает индексы элементов:
1. Значения которых удовлетворяют условию (элементы, которые в данном случае равны != 0)
2. Что можно напрямую использовать в качестве ввода индекса списка для другого массива? (Поскольку (Ar~=0)
результат используется в качестве входных данных, подобных этому Ar(Ar~=0)
Здесь Ar~=0
был использован в качестве ввода индекса списка, подобный этому, Ar(Ar~=0)
а затем определяется min массива Ar(Ar~=0)
. Другими словами, определяется минимальное значение массива, исключая элементы, значение которых равно 0.
Ответ №1:
Синтаксис python для массива numpy A был бы:
A[A!=0].min()
вы также можете задать элементы массива:
B = A.copy()
B[A==0] = A[A!=0].min()
просто как пример установки ограничения
Комментарии:
1. Да, это сработало. Не могу поверить, что это было так просто! Спасибо, приятель: D Хотя,
B[A==0] = A[!=0].min()
похоже, это не работает. Хотя я понял логику, стоящую за этим. Не могли бы вы объяснить, что именно делает эта строка?2. Важно, чтобы размер массивов с обеих сторон был одинаковым или (как в примере), чтобы правая сторона была скалярной