numpy.put_along_axis

numpy.put_along_axis(arr, indices, values, axis)[源代码]

通过匹配一维索引和数据切片将值放入目标数组。

这将遍历索引和数据数组中沿指定轴定向的匹配1d切片,并使用前者将值放入后者。这些切片可以是不同的长度。

函数沿轴返回索引,如 argsortargpartition ,为此函数生成适当的索引。

1.15.0 新版功能.

参数
阿瑞:恩达瑞(ni…,m,nk…)

目标数组。

索引:ndarray(ni…,j,nk…)

沿每一维切片变化的索引 arr . 这必须与arr的尺寸匹配,但ni和nj中的尺寸可能为1,以便广播 arr .

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

在这些索引处插入的值。它的形状和尺寸被广播以匹配 indices .

轴:int

要沿其进行1d切片的轴。如果axis为none,则目标数组将被视为已为其创建了扁平的1d视图。

参见

take_along_axis

通过匹配一维索引和数据切片从输入数组中获取值

笔记

这相当于(但比)以下使用 ndindexs_ ,设置每个 iikk 到一组索引:

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]])