Как работает этот код?Они удаляют элемент в массиве на основе условия.Синтаксис меня смущает - PullRequest
0 голосов
/ 25 апреля 2018

Образ проблемы

enter image description here

Они потеряли меня в той части, где "= -1"

Это мое понимание решения (пока). Они взяли переменную arr и отсканировали элементы, у которых остаток равен 1 при делении на 2. Часть = -1 - вот где я запутался.

  • Какие шаги предпринимаются здесь для замены этих нечетных чисел на отрицательный 1?
  • Может кто-нибудь объяснить более подробно, как "arr [arr% 2 == 1]" работает? Я думаю, что у меня есть очень простое понимание этого.

Кроме того, как называется эта конкретная техника?

EDIT: Поэтому я попробовал решение, которое они дали, и оно даже не работает ... Не уверен, что я сделал что-то не так с моей стороны

Оригинальная ссылка на сайт: Источник

1 Ответ

0 голосов
/ 25 апреля 2018

Как и все, что вы пытаетесь понять, делайте это шаг за шагом.Попробуйте распечатать каждое из этих промежуточных выражений:

  • arr - это массив numpy.Это важно, потому что все эти шаги зависят от специальных функций numpy - они не будут работать с обычным списком.
  • arr % 2 - это массив одинакового размера, содержащий четность каждого из оригинальныхчисла - 0 для четного, 1 для нечетного.
  • arr % 2 == 1 превращает это в массив логических значений - False для четного, True для нечетного.
  • arr[arr % 2 == 1] вызывает специальную функцию логического индексирования numpy- он дает вам представление (возможно, непрерывное) подмножества массива, где бы значение индекса не было True.В этом случае представление содержит только нечетные числа исходного массива.
  • arr[arr % 2 == 1] = -1 присваивает одинаковое значение каждому элементу в представлении, перезаписывая все исходные нечетные числа.

Ключевым понятием «numpy», используемым на всех этапах, является «широковещательная рассылка» - по сути, всякий раз, когда выполняется попытка выполнить операцию между массивом и одним элементом, отдельный элемент эффективно реплицируется для соответствия размеру массива.Итак, в arr % 2 2 условно становится массивом 2 s, того же размера, что и arr.

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