我有一个 h-by-w-by-3 numpy 数组A和另一个 h-by-w-by-2 numpy 数组B,它告诉我A在每个 (h, w) 位置从哪里获取值。用C(h-by-w-by-3)表示结果矩阵。天真,我可以C = np.zeros(A.shape)for i in range(B.shape[0]): for j in range(B.shape[1]): C[i, j, :] = A[B[i, j, 0], B[i, j, 1], :]但我相信有更高效、更 Pythonic 和更快的方式!
1 回答

跃然一笑
TA贡献1826条经验 获得超6个赞
确实有:
>>> import numpy as np
>>>
>>> h, w = 4, 6
>>>
>>> A = np.random.randint(0, 100, (h, w, 3))
>>> B = np.random.randint(0, h*w, (h, w, 2)) % [h, w]
>>>
>>> C = np.zeros(A.shape)
>>> for i in range(B.shape[0]):
... for j in range(B.shape[1]):
... C[i, j, :] = A[B[i, j, 0], B[i, j, 1], :]
...
>>>
>>> C2 = A[(*np.moveaxis(B, 2, 0),)]
>>> np.all(C == C2)
True
添加回答
举报
0/150
提交
取消