Spec-Zone.ru › NumPy 1.16

numpy.put_along_axis

numpy.put_along_axis(arr, indices, values, axis) [source]

Вставка значений в массив назначения по соответствию 1d индексов и срезов данных.

Функция итерируется по соответствующим 1d срезам, ориентированным вдоль указанной оси в массивах индексов и данных, и использует первые для размещения значений во вторые. Эти срезы могут иметь различную длину.

Функции, возвращающие индекс вдоль оси, такие как argsort и argpartition, генерируют подходящие индексы для этой функции.

Новая в версии 1.15.0.

Параметры:
arr: ndarray (Ni…, M, Nk…)

Массив назначения.

indices: ndarray (Ni…, J, Nk…)

Индексы для изменения вдоль каждого 1d среза arr. Он должен соответствовать размерности arr, но размерности в Ni и Nj могут быть равны 1, чтобы осуществлять вещание против arr.

values: array_like (Ni…, J, Nk…)

Значения для вставки в указанные индексы. Его форма и размерность вещаются для соответствия форме indices.

axis: int

Ось для взятия 1d срезов. Если axis равно None, массив назначения обрабатывается как будто для него был создан сплющенный 1d вид.

См. также

take_along_axis
Извлечение значений из входного массива по соответствию 1d индексов и срезов данных

Примечания

Это эквивалентно (но быстрее, чем) следующему использованию ndindex и s_, которое устанавливает каждый из ii и kk в кортеж индексов:

Ni, M, Nk = a.shape[:axis], a.shape[axis], a.shape[axis+1:]
J = indices.shape[axis]  # Need not equal M

for ii in ndindex(Ni):
    for kk in ndindex(Nk):
        a_1d       = a      [ii + s_[:,] + kk]
        indices_1d = indices[ii + s_[:,] + kk]
        values_1d  = values [ii + s_[:,] + kk]
        for j in range(J):
            a_1d[indices_1d[j]] = values_1d[j]

Эквивалентно, исключая внутренний цикл, последние две строки были бы:

a_1d[indices_1d] = values_1d

Примеры

Для этого образцового массива

>>> a = np.array([[10, 30, 20], [60, 40, 50]])

Мы можем заменить максимальные значения на:

>>> ai = np.expand_dims(np.argmax(a, axis=1), axis=1)
>>> ai
array([[1],
       [0]], dtype=int64)
>>> np.put_along_axis(a, ai, 99, axis=1)
>>> a
array([[10, 99, 20],
       [99, 40, 50]])

© 2005–2019 NumPy Developers
Licensed under the 3-clause BSD License.
https://docs.scipy.org/doc/numpy-1.16.1/reference/generated/numpy.put_along_axis.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API