我有一组2d索引。
indices = [[2,4], [6,77], [102,554]]
现在,我有一个不同的4维数组,arr,我想只提取一个数组(它是一个数组,因为它是4维),在indices数组中有相应的索引。它等同于以下代码。
for i in range(len(indices)):
output[i] = arr[indices[i][0], indices[i][1]]
然而,我意识到使用显式for循环会产生缓慢的结果。我可以使用任何内置的numpy API吗?此时,我尝试使用np.choose,np.put,np.take,但没有成功产生我想要的东西。谢谢!
答案 0 :(得分:1)
我们需要使用索引中的两列(将其视为数组)索引前两个轴。
因此,只需转换为数组和索引,就像这样 -
indices_arr = np.array(indices)
out = arr[indices_arr[:,0], indices_arr[:,1]]
或者我们可以直接提取它们而不转换为数组然后索引 -
d0,d1 = [i[0] for i in indices], [i[1] for i in indices]
out = arr[d0,d1]
提取元素的另一种方法是转换为元组,就像这样 -
out = arr[tuple(indices_arr.T)]
如果indices
已经是一个数组,请跳过转换过程,并在我们indices
的地方使用indices_arr
。
答案 1 :(得分:0)
尝试使用numpy数组的take函数。你的代码应该是这样的:
outputarray= np.take(arr,indices)