Функция putmask
Функция putmask изменяет элементы
массива на месте, устанавливая новые значения
для тех элементов, где соответствующая маска
равна True. Первым параметром функция принимает
массив для изменения. Вторым параметром
передается маска (логический массив). Третьим
параметром указываются значения для установки.
Функция изменяет исходный массив.
Синтаксис
np.putmask(a, mask, values)
Пример
Заменим элементы по маске:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
mask = np.array([True, False, True, False, True])
np.putmask(arr, mask, 0)
print(arr)
Результат выполнения кода:
[0 2 0 4 0]
Пример
Используем условие в качестве маски:
import numpy as np
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
np.putmask(arr, arr > 4, 99)
print(arr)
Результат выполнения кода:
[ 1 2 3 4 99 99 99 99]
Пример
Установим разные значения в зависимости от маски:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
mask = np.array([True, False, True, False, True])
np.putmask(arr, mask, [10, 20, 30])
print(arr)
Результат выполнения кода:
[10 2 20 4 30]
Пример
Применим putmask к двумерному массиву:
import numpy as np
arr = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
mask = arr % 2 == 0
np.putmask(arr, mask, 0)
print(arr)
Результат выполнения кода:
[[1 0 3]
[0 5 0]
[7 0 9]]
Пример
Сравним putmask с использованием индексации:
import numpy as np
arr1 = np.array([1, 2, 3, 4, 5])
arr2 = np.array([1, 2, 3, 4, 5])
np.putmask(arr1, arr1 > 3, 9)
arr2[arr2 > 3] = 9
print("putmask:", arr1)
print("indexing:", arr2)
Результат выполнения кода:
"putmask: [1 2 3 9 9]"
"indexing: [1 2 3 9 9]"
Пример
Используем putmask с массивом значений больше длины маски:
import numpy as np
arr = np.array([10, 20, 30, 40, 50])
mask = np.array([True, False, False, True, True])
np.putmask(arr, mask, [100, 200, 300, 400])
print(arr)
Результат выполнения кода:
[100 20 30 200 300]