给定形状为numpy
的{{1}}数组items
和形状为(D, N, Q)
的另一个索引ids
数组,如何制作新的数组{通过使用索引(N, P)
,形状为my_items
的{1}},如下所示:
(D, N, P)
使用nq_ids
魔法而不是使用任何显式循环?这是一个最小的示例:
# How can these loops be avoided?
my_items = np.zeros((D, N, P))
for n in range(N):
for p in range(P):
my_items[:, n, p] = items[:, n, ids[n, p]]
如果可能的话,我也想保留元素顺序。
答案 0 :(得分:0)
现在应该可以正常工作,返回与循环完全相同的ndarray:
np.stack([np.take(items[:,i,:], ids[i, :], axis=1)
for i in range(ids.shape[0])], axis=2).transpose((0,2,1))
但是,@ hpaulj的方法更快,分别为23.5 µs和5 µs。所以用那个。