用索引列表重新排列3d numpy数组

时间:2018-08-03 15:00:24

标签: python numpy indexing

我有一个尺寸为333 * 333 * 52的3维numpy数组

我有一个333个元素列表,索引的范围是0-332,例如[4 12 332 0 ...],我希望用来重新排列3d数组的前两个维度。

在matlab中,我会这样做:

rearranged_array = original_array(new_order, new_order, :)

但是这种方法不适用于numpy:

rearranged_array = original_array[new_order, new_order, :]

产生333 * 52阵列

而:

rearranged_array = original_array[new_order][new_order, :]

没有以正确的顺序得到东西

编辑:

这似乎可行:

rearranged_array = original_array[new_order, :][:, new_order]

对我来说,这似乎不如matlab方法直观得多-有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

您的第三个

rearranged_array = original_array[new_order][new_order, :]

只是做两次相同的操作。

您想要

rearranged_array = original_array[new_order][:, new_order]

第一个解决方案不起作用的原因是,如果传递的索引是列表或数组,则numpy仅进行重新排列,但是如果传递new_order, new_order,则为元组。

另一种解决方法是

 rearranged_array = original_array[np.row_stack((new_order, new_order))]

nb。您会继续做a[x, y, :]a[x, :]之类的事情。尾随:是多余的。 a[x, y]a[x]分别做完全相同的事情。