说我有一个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]]
我该怎么做?
答案 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
接受三个参数:a
,shift
和axis
:
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]]