numpy.place

numpy.place(arr, mask, vals)

Функция place() изменяет элементы массива на указанные значения в зависимости от выполнения заданных условий.

Параметры:
arr - массив NumPy.
Исходный массив.
mask - массивов NumPy или массивоподобный объект.
Булев массив той же формы что и arr, который является маской для исходного массива и определяет какие элементы должны быть заменены: True - замена выполняется, False - элемент остается без изменений.
vals - одномерный массив NumPy или массивоподобный объект.
Содержит элементы для вставки в исходный массив. Данный массив может быть любой длины, так как используются только первые n элементов, где n - это количество истинных значений в mask, если длина vals меньше чем n, то перебор значений для вставки будет выполняться циклически. Данная последовательность может быть пустой, только если все элементы в mask равны False.
Возвращает:
Данная функция ничего не возвращает, а сразу изменяет исходный массив arr.
Смотрите так же:
put, put_along_axis, take, copyto


Примеры

В качестве vals может быть указано одно скалярное значение:

>>> import numpy as np
>>> 
>>> a = np.arange(20).reshape(4, 5)
>>> a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])
>>> 
>>> np.place(a, a%2 == 1, -77)
>>> a
array([[  0, -77,   2, -77,   4],
       [-77,   6, -77,   8, -77],
       [ 10, -77,  12, -77,  14],
       [-77,  16, -77,  18, -77]])

Если значений в vals меньше чем значений True в mask, то значения будут вставляться циклически:

>>> np.place(a, a == -77, [111, 222])
>>> a
array([[  0, 111,   2, 222,   4],
       [111,   6, 222,   8, 111],
       [ 10, 222,  12, 111,  14],
       [222,  16, 111,  18, 222]])

С другой стороны, если значений в vals больше чем значений True в mask, то будут вставлены не все значения:

>>> np.place(a, a == 111, np.arange(10, 110, 10))
>>> a
array([[  0,  10,   2, 222,   4],
       [ 20,   6, 222,   8,  30],
       [ 10, 222,  12,  40,  14],
       [222,  16,  50,  18, 222]])

Если в mask вообще нет значений True, то vals может быть пустым:

>>> a < 0
array([[False, False, False, False, False],
       [False, False, False, False, False],
       [False, False, False, False, False],
       [False, False, False, False, False]])
>>> 
>>> np.place(a, a < 0, [])
>>> a
array([[  0,  10,   2, 222,   4],
       [ 20,   6, 222,   8,  30],
       [ 10, 222,  12,  40,  14],
       [222,  16,  50,  18, 222]])