Используя метод 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 ()