重新排列numpy 2D数组的列

5xum;

有没有办法将numpy 2D数组中的列顺序更改为新的任意顺序?例如,我有一个数组

array([[10, 20, 30, 40, 50],
       [ 6,  7,  8,  9, 10]])

我想将其更改为

array([[10, 30, 50, 40, 20],
       [ 6,  8, 10,  9,  7]])

通过应用排列

0 -> 0
1 -> 4
2 -> 1
3 -> 3
4 -> 2

在列上。因此,在新矩阵中,我希望将原始矩阵的第一列保留在原位置,将第二列移至最后一列,依此类推。

有一个numpy函数可以做到吗?我有一个相当大的矩阵,并且希望得到更大的矩阵,因此我需要一个可以在可能的情况下快速且适当地执行此操作的解决方案(置换矩阵是不可行的)

谢谢。

威姆:

使用花式索引可以在O(n)时间和O(n)空间中实现:

>>> import numpy as np
>>> a = np.array([[10, 20, 30, 40, 50],
...               [ 6,  7,  8,  9, 10]])
>>> permutation = [0, 4, 1, 3, 2]
>>> idx = np.empty_like(permutation)
>>> idx[permutation] = np.arange(len(permutation))
>>> a[:, idx]  # return a rearranged copy
array([[10, 30, 50, 40, 20],
       [ 6,  8, 10,  9,  7]])
>>> a[:] = a[:, idx]  # in-place modification of a

请注意,a[:, idx]返回的是副本,而不是视图。在一般情况下,由于在内存中如何分割numpy数组,因此无法使用O(1)空间解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章