为了账号安全,请及时绑定邮箱和手机立即绑定

NumPy 中的多维情况是否存在与 np.take 相反的情况?

NumPy 中的多维情况是否存在与 np.take 相反的情况?

HUWWW 2023-09-26 14:07:28
如果我有N-D 数组a和一维数组indexes和,那么将值分配给沿给定轴使用这些索引索引的子数组的axis最短/最简单的方法是什么?a如果N和axis在代码编写时已知/固定,那么我可以轻松地做到a[:,   :,   :,   indexes,   :,   :] = b                ^^axis pos^^但是如果N和axis仅在运行时才知道,例如在用户输入一些数据之后,该怎么办?我发现的最简单的形式是这样的:a[(slice(None),) * (axis % a.ndim) + (indexes,)] = b但也许有一些内置功能?有np.put但它似乎只适用于扁平数组,不支持多维。还有np.take,它适用于多维情况,但与我需要的相反,它读取数据而不是写入,尽管具有我正在寻找的写入语法。你可以这样做:b = np.take(a, indexes, axis)那么有相反的吗np.take?就像np.nd_put,可以这样做:np.nd_put(a, indexes, axis, b)
查看完整描述

1 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

一种方法是排列轴,将其置于axis前面并简单地索引 -


np.moveaxis(a,axis,0)[indexes] = np.moveaxis(b,axis,0)

np.put_along_axis如果您正在寻找围绕 bultin 构建的东西,则另一个-


i = [None]*b.ndim

i[axis] = Ellipsis

np.put_along_axis(a, indexes[tuple(i)], b, axis=axis)

为了完整起见,这是切片版本 -


i = [slice(None)]*b.ndim

i[axis] = indexes

a[tuple(i)] = b

您可以将其转换为单行代码以进行i列表理解。


查看完整回答
反对 回复 2023-09-26
  • 1 回答
  • 0 关注
  • 51 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信