首页 > 解决方案 > 使用 numpy 的 Python 矩阵交换列

问题描述

这是我试图交换列的 Y 矩阵(使列 [1,2,3,4,5] 代替 [5,4,3,2,1])但是,这改变了数字的准确性

这是Y

> array([[ 0.0e+00,  1.0e-15,  0.0e+00,  0.0e+00,  0.0e+00],
>        [ 1.0e+00,  0.0e+00,  0.0e+00,  0.0e+00,  0.0e+00],
>        [-1.0e-02,  1.2e-02,  0.0e+00,  0.0e+00,  0.0e+00],
>        [ 1.0e-02, -1.0e-02,  1.0e+00,  0.0e+00,  0.0e+00]])

这是代码

y1, y2= np.shape(Y)
 y2= y2-2
 for row in range (y1):
     for column in range (y2):
         Z[row, column]=Y[row, y2-column+1] 

这是Z

array([[0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 1., 0., 0.]])

我怎样才能使它具有相同的精度?

标签: pythonnumpymatrixswapfloating-accuracy

解决方案


不要在这里循环,只需使用np.flip

x = np.array([[ 0.0e+00,  1.0e-15,  0.0e+00,  0.0e+00,  0.0e+00],
    [ 1.0e+00,  0.0e+00,  0.0e+00,  0.0e+00,  0.0e+00],
    [-1.0e-02,  1.2e-02,  0.0e+00,  0.0e+00,  0.0e+00],
    [ 1.0e-02, -1.0e-02,  1.0e+00,  0.0e+00,  0.0e+00]])

np.flip(x, axis=1)

array([[ 0.0e+00,  0.0e+00,  0.0e+00,  1.0e-15,  0.0e+00],
       [ 0.0e+00,  0.0e+00,  0.0e+00,  0.0e+00,  1.0e+00],
       [ 0.0e+00,  0.0e+00,  0.0e+00,  1.2e-02, -1.0e-02],
       [ 0.0e+00,  0.0e+00,  1.0e+00, -1.0e-02,  1.0e-02]])

如果您有不同的顺序,例如:4, 3, 5, 2, 1,您可以使用高级索引:

x[:, [3, 2, 4, 1, 0]]

array([[ 0.0e+00,  0.0e+00,  0.0e+00,  1.0e-15,  0.0e+00],
   [ 0.0e+00,  0.0e+00,  0.0e+00,  0.0e+00,  1.0e+00],
   [ 0.0e+00,  0.0e+00,  0.0e+00,  1.2e-02, -1.0e-02],
   [ 0.0e+00,  1.0e+00,  0.0e+00, -1.0e-02,  1.0e-02]])

推荐阅读