Python 在Numpy中交换行将生成一个嵌入式数组

Python 在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,

我试图使用以下数组交换np.array
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]])