np.where: что такое функция Numpy where () в Python

Используя метод numpy where (), элементы массива Numpy ndarray, удовлетворяющие условиям, могут быть заменены или выполнены указанной обработкой. Для этого урока вам необходимо установить numpy . Вы также можете проверить свою версию numpy .

np.where

np. Метод where () возвращает элементы, выбранные из x или y в зависимости от условия. Если вы хотите выбрать элементы на основе условия, используйте функцию np where (). Функция where () принимает условное выражение в качестве аргумента и возвращает новый массив numpy.

Синтаксис

 numpy.where  (condition [, x, y]) 

Параметры

condition: условное выражение, которое возвращает массив логических значений Numpy.
x, y: Arrays (необязательно, т. е. либо оба передаются, либо не передаются)

  • Если все аргументы -> condition, x & y заданы в методе numpy.where (), то он вернет элементы, выбранные из x и y, в зависимости от значений в bool. массив, полученный по условию. Все три массива должны быть одинакового размера.
  • Если аргументы x и y не переданы, а передан только аргумент условия, то он возвращает кортеж массивов (по одному для каждой оси), содержащий индексы элементов, которые являются True в массиве bool numpy, возвращенном условием.

Это означает, что если условие возвращает True для некоторого элемента в нашем массиве, новый массив будет выбирать элементы из x.

В противном случае, если это False , будут взяты элементы из y.

При этом наш окончательный выходной массив будет массивом с элементами из x где угодно condition = True и элементы из y , если condition = False .

Здесь следует отметить одну вещь , что, хотя x и y являются необязательными, если вы указываете x, вы также ДОЛЖНЫ указать y. Это необходимо сделать, потому что в этом случае форма выходного массива должна совпадать с формой входного массива.

Возвращаемое значение

Метод where () возвращает новый массив numpy после фильтрации на основе условия , который представляет собой массив логических значений, подобный numpy.

Пример

 импортировать numpy как npdata = np.where ([True, False, True], [11, 21, 46], [19  , 29, 18]) print (data) 

Вывод

 [11 29 46] 

Numpy.where () выполняет итерацию по массиву bool и для каждого True возвращает соответствующий массив элементов x, а для каждого False возвращает соответствующий элемент из массива y. Таким образом, он возвращает массив элементов из x , где condition True , и элементы из y в другом месте..

Условие может принимать значение массива ([[True, True, True]]), который представляет собой логический массив типа numpy. (По умолчанию NumPy поддерживает только числовые значения, но мы также можем преобразовать их в bool).

Давайте рассмотрим другой пример, если условием является array ([[True, True , False]]) , и наш массив имеет вид a = ndarray ([[1, 2, 3]]) при применении условия к массиву (a [:, condition ]), мы получим массив ndarray ([[1 2]]).

Замена элементов на numpy.where ()

Мы будем использовать функцию np.random.randn () для генерации двумерного массива, и мы будем выводить только положительные элементы. См. Код.

 import numpy as np # Случайная инициализация (2D-массива) arr = np.random.randn (2, 3) print (arr) # Результатом будут все элементы a всякий раз, когда  условие выполняется (т.е. только положительные элементы) # В противном случае установите его как 0result = np.where (arr> 0, arr, 0) print (result) 

Output ▪

 [[-1,49929393 0,68739761 -0,59852165] [0,59212319 1,81549763 -0,32777714]] [[0.  0,68739761 0.] [0,59212319 1,81549763 0.]] 

Из вывода видно, что элементы с отрицательными значениями удалены, а вместо 0 заменены отрицательными значениями.

Использование np where () с несколькими условиями

Если каждое условное выражение заключено в () и & или | используется, обработка применяется к нескольким условиям.

 import numpy as np # Случайная инициализация (2D-массива) arr = np.random.randn (2, 3) print (arr) result  = np.where ((arr> 0.1) & (arr  

Вывод

 [[- 0,51877986 2,29435425 0,76549418] [-0,94666634 1,74349695 -0,82869105]] [[19 19 -1] [19 19 19]] 

Вы можете По выходным данным видно, что мы применили три условия с помощью оператора and и оператора or. Если значение элементов массива находится в диапазоне от 0,1 до 0,99 или 0,5, тогда он вернет -1, иначе 19.

Даже в случае нескольких условий нет необходимости использовать np.where () для получения логического значения ndarray.

Обработка элементов, удовлетворяющих условию

Вместо исходного ndarray вы можете также укажите операцию, которая будет выполняться с элементами, если элементы удовлетворяют условию.

 import numpy as np # Случайная инициализация (2D-массива) arr = np.random.randn (2, 3  ) print (arr) result = np.where (arr  

Вывод

 [[0.4934594 -0.43502907 -0.01968412] [-0.52953907 0.41415299 -0.29620816]] Массив после выполнения операции [[4.93459402 -4.35029075 -0.19684123  ] [-5.2953907 4.14152986 -2.96208157]] 

Вы можете видеть, что он умножит каждый элемент на 10, если какой-либо элемент меньше 10. В противном случае в этом месте будет возвращено 19.

Трансляция с помощью numpy.where ()

Если мы предоставим все condition, x и y массивы, numpy будет транслировать их вместе.

См. следующий код.

 импортируйте numpy как nparr = np.arange (6) .reshape (2, 3) brr = np.arange (3).  reshape (1, 3) print (arr) print (brr) # Передает (arr  

Вывод

 [[0 1  2] [3 4 5]] [[0 1 2]] После трансляции: [[0 1 10] [0 5 10]] 

Наконец, пример функции Numpy where () завершен.

См. также

Numpy random shuffle ()

Numpy percentile ()

Numpy matmul ()

Numpy ceil ()

Numpy floor ()

Оцените статью
nanomode.ru
Добавить комментарий