NumPy参考 >例行程序 >Indexing routines > numpy.put_along_axis
numpy.
put_along_axis
(arr,indexs,values,axis )[源代码] ¶通过匹配一维索引和数据切片将值放入目标数组。
这将迭代沿索引和数据数组中沿指定轴定向的匹配1d切片,并使用前者将值放入后者。这些切片的长度可以不同。
沿轴返回索引的函数(例如argsort
和
argpartition
)会为此函数生成合适的索引。
1.15.0版中的新功能。
目标数组。
沿arr的每个1d切片变化的指标。这必须匹配arr的尺寸,但是要针对arr广播,Ni和Nj中的尺寸可能为1 。
要在这些索引处插入的值。广播其形状和尺寸以匹配indices
。
沿其取一维切片的轴。如果axis为None,则将目标数组视为已为其创建平化的1d视图。
也可以看看
take_along_axis
通过匹配一维索引和数据切片从输入数组中获取值
笔记
这等效于(但比其快)以下对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]])