如何交换numpy矩阵的列

0 投票
3 回答
1813 浏览
提问于 2025-04-18 01:12

你需要根据对角线元素的衰减值来排序列,具体来说就是:0.884 > 0.749 > 0.640。这样的话,就需要把第1列和第3列交换一下。

numpy.array(
    [
        [ 0.640 -0.655  0.399]
        [ 0.617  0.749  0.239]
        [-0.456  0.093  0.884]
     ]

这样就能得到结果:

numpy.array(
    [
        [ 0.399 -0.655  0.640]
        [ 0.239  0.749  0.617]
        [-0.884  0.093 -0.456]
     ]

3 个回答

0

你可以使用更高级的切片功能:

>>> import numpy as np
>>> a = np.arange(25).reshape(5,5)
>>> a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24]])
>>> a[:,[0,4]] = a[:,[4,0]]
>>> a
array([[ 4,  1,  2,  3,  0],
       [ 9,  6,  7,  8,  5],
       [14, 11, 12, 13, 10],
       [19, 16, 17, 18, 15],
       [24, 21, 22, 23, 20]])
>>>
1

我会这样做:

a[: , numpy.argsort(a.diagonal())[::-1] ]
  • a.diagonal 来获取对角线上的值,然后用 [::-1] 反转这些值的顺序
  • 使用 numpy.argsort 来获取列的新顺序
2

我觉得这就是你想要的内容:

>>> a
array([[ 0.64 , -0.655,  0.399],
       [ 0.617,  0.749,  0.239],
       [-0.456,  0.093,  0.884]])
>>> a[:, np.argsort(a.diagonal() * -1)]
array([[ 0.399, -0.655,  0.64 ],
       [ 0.239,  0.749,  0.617],
       [ 0.884,  0.093, -0.456]])

撰写回答