【发布时间】:2015-08-11 07:13:24
【问题描述】:
我有一个 3D data = NxMxD numpy 数组和另一个 2D idx = NxM 整数数组,其值在 [0, D-1] 的范围内。我想在该位置的idx 数组给定的深度对每个data = NxM 条目执行基本更新。
例如,对于N = M = D = 2:
data = np.zeros((2,2,2))
idx = np.array([[0,0],[1, 1]], int)
我想执行一个简单的操作,例如:
data[..., idx] += 1
我的预期输出是:
>>> data
array([[[ 1., 0.],
[ 1., 0.]],
[[ 0., 1.],
[ 0., 1.]]])
idx 为每个 2D 坐标指示应该更新哪个 D。上述操作无效。
我在 SO 中找到了this approach,它通过以下方式解决了索引问题:
data[np.arange(N)[:, None], np.arange(M)[None, :], idx] += 1
它工作正常,但看起来非常可怕,需要手动索引整个矩阵,这似乎是一个非常简单的操作(使用一个矩阵作为最后一个通道的索引掩码)。
有没有更好的解决方案?
【问题讨论】: