我有一个ndarray数组
我想得到一个结果ndarray数组
array
,它有三个维度,并且一些包含两个维度的索引ndarray数组idxs
,用于指定array
的第一维度的索引。 idxs
的第一个维度与array
的第二个维度匹配,即idxs.shape[0] == array.shape[1]
。我想得到一个结果ndarray数组
result
,它具有三个维度和形状(idxs.shape[1], array.shape[1], array.shape[2])
,如下所示:for i0 in range(idxs.shape[1]):
for i1 in range(array.shape[1]):
result[i0, i1] = array[idxs[i1, i0], i1]
如何更直接地获得这个?
我考虑使用高级索引,但我不确定它应该是什么样子。
在 Theano 中,以下内容有效:
dim1 = theano.tensor.arange(array.shape[1])
result = array[idxs[dim1], dim1]
np.ix_
专门为此目的而设计。 - ali_mnp.ix_
不能用于二维数组输入,因此最后一步仍需要“广播索引”,对吗?我甚至不确定该怎么称呼它 :) - Divakarrow_idx
与idxs
完全相同,因此你可以直接使用array[idxs, np.arange(array.shape[1])[:, None]].T
(或者array[idxs.T, np.r_[:array.shape[1]]]
作为紧凑的方式)。 - ali_midxs.shape[0] == array.shape[1]
,但有了它,似乎idxs
就与row_idx
相同了。那个np.r_
是另一个很棒的工具,非常感谢!考虑将所有这些发布为答案吧! - Divakar