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]]) >>> np.put_along_axis(a, ai, 99, axis=1) >>> a array([[10, 99, 20], [99, 40, 50]])
© 2005–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.19/reference/generated/numpy.put_along_axis.html