如何将numpy矩阵的col移至最后一个col?

时间:2019-08-23 02:00:32

标签: python numpy matrix

说我有一个numpy矩阵:

[[1, 3, 4, 7, 8]
 [5, 6, 8, 2, 6]
 [2, 9, 3, 3, 6]
 [7, 1, 9, 3, 5]]

我想将矩阵的第2列移到最后一列:

[[1, 4, 7, 8, 3]
 [5, 8, 2, 6, 6]
 [2, 3, 3, 6, 9]
 [7, 9, 3, 5, 1]]

我该怎么做?

2 个答案:

答案 0 :(得分:3)

使用numpy.roll

arr[:, 1:] = np.roll(arr[:, 1:], -1, 1)

输出:

array([[1, 4, 7, 8, 3],
       [5, 8, 2, 6, 6],
       [2, 3, 3, 6, 9],
       [7, 9, 3, 5, 1]])

方法:

np.roll接受三个参数:ashiftaxis

np.roll(a = arr[:, 1:], shift = -1, axis = 1)

这意味着,沿轴1(即,arr[:, 1:](所有行,所有列从1开始),并将其向左移动一个单位(-1,向右为+1)。柱状移位,轴0为行移位。

顾名思义,

np.roll循环移位。一个单位的移位将使最后一列成为第一列,依此类推。

答案 1 :(得分:0)

创建一个列列表,然后使用它为数组建立索引。这里,new_column_order使用范围来获取col之前的所有列,使用另一个范围来获取col之后的所有列,然后将col放在末尾。每个范围对象都通过*解压缩到新的列列表中。

x = np.array([[1, 3, 4, 7, 8], 
              [5, 6, 8, 2, 6], 
              [2, 9, 3, 3, 6], 
              [7, 1, 9, 3, 5]])
col = 1 # 2nd column
new_column_order = [*range(col), *range(col + 1, x.shape[-1]), col]
x_new = x[:, new_column_order]
print(x_new)

输出:

[[1 4 7 8 3]
 [5 8 2 6 6]
 [2 3 3 6 9]
 [7 9 3 5 1]]