Альтернатива Python для кода MATLAB ‘min(Ar_1(Ar_1 ~=0))’

#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. Важно, чтобы размер массивов с обеих сторон был одинаковым или (как в примере), чтобы правая сторона была скалярной