当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python numpy put_along_axis用法及代码示例


本文简要介绍 python 语言中 numpy.put_along_axis 的用法。

用法:

numpy.put_along_axis(arr, indices, values, axis)

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

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

沿轴返回索引的函数(如 argsort argpartition )会为此函数生成合适的索引。

参数

arr ndarray (Ni…, M, Nk…)

目标数组。

indices ndarray (Ni…, J, Nk…)

沿 arr 的每个 1d 切片更改的索引。这必须与 arr 的维度匹配,但 Ni 和 Nj 中的维度可能为 1 以针对 arr 进行广播。

values 数组 (Ni…, J, Nk…)

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

axis int

沿 1d 切片的轴。如果axis为None,则将目标数组视为已为其创建了扁平的一维视图。

注意

这相当于(但比)以下使用 ndindex s_ ,将 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]])

相关用法


注:本文由纯净天空筛选整理自numpy.org大神的英文原创作品 numpy.put_along_axis。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。