numpy.put

numpy.put(a, ind, v, mode='raise')

Функция put() заменяет элементы массива по указанному индексу заданными значениями. Однако, индексирование ведется по сжатому до одной оси представлению массива, а сама данная функция эквивалентна команде a.flat[ind] = v.

Параметры:
a - массив NumPy.
Исходный массив.
ind - массив NumPy, массивоподобный объект или целое число.
Индексы заменяемых элементов.
v - массив NumPy, массивоподобный объект.
Значения вставляемые в указанные индексы исходного массива. Если v меньше чем ind, то значения для вставки будут браться циклически.
mode - {'raise', 'wrap', 'clip'} (необязательный параметр).

Определяет метод обработки индексов, которые выходят за пределы формы исходного массива:

  • 'raise' - вызывать исключение (по умолчанию);
  • 'wrap' - обогнуть вокруг оси, т.е. циклически сместиться по ней;
  • 'clip' - обрезает до диапазона индексов исходного массива, причем отрицательные индексы обрезаются до 0.
Возвращает:
Данная функция ничего не возвращает, а сразу изменяет исходный массив a.
Смотрите так же:
put_along_axis, place, putmask, ravel_multi_index

Замечание

Данная функция так же реализована в виде метода базового класса ndarray.put() с аналогичной сигнатурой (ndarray.take(ind, v, mode='raise')) и принципом работы.



Примеры

Принцип работы данной функции крайне прост:

>>> import numpy as np
>>> 
>>> a = np.ones((3, 4))
>>> a
array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])
>>> 
>>> np.put(a, [3, 7, 11], [22, 33, 44])
>>> a
array([[ 1.,  1.,  1., 22.],
       [ 1.,  1.,  1., 33.],
       [ 1.,  1.,  1., 44.]])

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

>>> a = np.arange(6)
>>> a
array([0, 1, 2, 3, 4, 5])
>>> 
>>> np.put(a, 5, 10)
>>> a
array([ 0,  1,  2,  3,  4, 10])
>>> 
>>> np.put(a, 10, 77, mode = 'clip')
>>> a
array([ 0,  1,  2,  3,  4, 77])

В примере выше, мы должны были увидеть сообщение об ошибке, так как последний элемент в ind явно превышает дину индексируемого массива. Но благодаря режиму 'clip' 10 было урезано до 6.

Режим 'wrap' в случае превышения размеров массива позволяет вести отсчет циклически, смещаясь по оси:

>>> np.put(a, 6, 88, mode = 'wrap')
>>> a
array([88,  1,  2,  3,  4, 77])

Данная функция также реализована в виде метода базового класса ndarray.put():

>>> a.put(7, 99, mode = 'wrap')
>>> a
array([88, 99,  2,  3,  4, 77])