Python 如何将numpy矩阵的列移到最后一列?

Python 如何将numpy矩阵的列移到最后一列?,python,numpy,matrix,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]] 具体如何操作?创建列列表,然后使用该列表为数组编制索引。这里,new\u column\u order使用一个范围获取col之前的所有列,另一个范围获取co

假设我有一个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]]

具体如何操作?

创建列列表,然后使用该列表为数组编制索引。这里,
new\u column\u 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]]

使用
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

np.roll(a = arr[:, 1:], shift = -1, axis = 1)
这意味着,取
arr[:,1:://code>(所有行,1中的所有列),沿轴1向左移动一个单位(-1。向右移动将为+1)(即,列移动,轴0将为行移动)


np.roll
,顾名思义,是一种循环移位。一个单位的班次将使最后一列成为第一列,依此类推。

Woah。我是python新手。你介意解释一下x_新线在做什么吗?谢谢@VickConan I稍微修改了示例代码并添加了一些散文。让我知道我是否可以帮助澄清任何更好的。太好了!非常感谢。嗨,克里斯,我是python新手。你介意解释一下那条线在干什么吗?谢谢。@VickConan请看一下更新的How部分:)