You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻找类似numpy.take的可赋值函数,支持动态指定操作轴

解决方案

你可以用numpy.put_along_axis函数实现需求,它完美对应numpy.take的赋值场景,支持动态指定操作轴,不用写分支处理不同轴的情况,且能直接修改原数组。

基础示例(二维数组)

比如你提到的二维数组:

import numpy as np
a = np.array([[1,2],[3,4]])

对应花式索引赋值a[0, :] = 10,用put_along_axis的写法是:

# 指定要修改的位置索引,需扩展维度匹配原数组形状
indices = np.array([0])[:, np.newaxis]
np.put_along_axis(a, indices, 10, axis=0)

执行后a会变为array([[10, 10], [3, 4]]),和花式索引的效果完全一致。

参数说明

  • 第一个参数:要修改的目标数组
  • 第二个参数:要操作的位置索引,注意索引的形状需要和目标数组在指定轴上的维度匹配(比如轴0是行维度,需要把一维索引转成列向量,用[:, np.newaxis]或[:, None]扩展维度)
  • 第三个参数:要赋的值,可以是标量(会自动广播),也可以是和索引形状匹配的数组
  • 第四个参数:指定要操作的轴

高维数组示例

对于三维数组,同样无需修改逻辑,直接指定轴即可:

b = np.arange(27).reshape(3,3,3)
# 修改轴1的第1个位置为0
indices = np.array([1])[None, :, None]
np.put_along_axis(b, indices, 0, axis=1)

另外,numpy.take_along_axis是numpy.take的对应取值函数,和put_along_axis配对使用,完全覆盖你需要的“非花式索引+动态轴+取值/赋值”场景。

内容的提问来源于stack exchange,提问作者5xum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 17:14:59