Python 在Numpy中交换行将生成一个嵌入式数组
我试图使用以下数组交换np.arrayPython 在Numpy中交换行将生成一个嵌入式数组,python,numpy,matrix,subset,Python,Numpy,Matrix,Subset,我试图使用以下数组交换np.arrayA的行: A = np.array([[0,-3,-6,4,9], [-1,-2,-1,3,1], [-2,-3,0,3,-1], [1,4,5,-9,-7]]) 当我使用以下代码时: A = np.array([A[3],A[0],A[1],A[2]]) 我的数组变为 array([[ 1, 4, 5, -9, -7], [ 0, -3, -6, 4,
A
的行:
A = np.array([[0,-3,-6,4,9],
[-1,-2,-1,3,1],
[-2,-3,0,3,-1],
[1,4,5,-9,-7]])
当我使用以下代码时:
A = np.array([A[3],A[0],A[1],A[2]])
我的数组变为
array([[ 1, 4, 5, -9, -7],
[ 0, -3, -6, 4, 9],
[-1, -2, -1, 3, 1],
[-2, -3, 0, 3, -1]])
就像我希望、希望和梦想的那样。但是,当我尝试更宽的切片时(因为我需要更大的矩阵),它的效果不太好:
A = np.array([A[3], A[0:3]])
A
array([array([-2, -3, 0, 3, -1]),
array([[ 1, 4, 5, -9, -7],
[ 0, -3, -6, 4, 9],
[-1, -2, -1, 3, 1]])], dtype=object)
为什么会发生这种情况/我如何才能正确执行此切片?您可以使用
vstack
:
In [5]: np.vstack([A[3], A[0:3]])
Out[5]:
array([[ 1, 4, 5, -9, -7],
[ 0, -3, -6, 4, 9],
[-1, -2, -1, 3, 1],
[-2, -3, 0, 3, -1]])
第一个表达式可以写得更简单
A = A[[3, 0, 1, 2], :])
因此,第二个可以写成
A = A[[3, *range(3)], :]
这比使用roll
更通用,因为您可以使用以下命令移动任意行
A = A[[1, *range(1), *range(2, 4)], :]
np.roll
如评论所示可能是最佳选择。您还可以使用np.r\:
A[np.r_[3,0:3]]
输出:
使用np.roll
:np.roll(A,1,轴=0)
。
array([[ 1, 4, 5, -9, -7],
[ 0, -3, -6, 4, 9],
[-1, -2, -1, 3, 1],
[-2, -3, 0, 3, -1]])