我有一个尺寸为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方法直观得多-有更好的方法吗?
答案 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]
分别做完全相同的事情。