Numpy中的行交换产生一个嵌入式数组

问题描述 投票:0回答:2

我正在尝试使用以下数组交换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)

为什么会这样/如何正确执行此切片?

python numpy matrix subset
2个回答
0
投票
您可以使用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]])


0
投票
第一个表达式可以写得更简单:

A = A[[3, 0, 1, 2], :])

第二个因此可以写成

A = A[[3, *range(3)], :]


推荐问答