如何交换numpy矩阵的列
你需要根据对角线元素的衰减值来排序列,具体来说就是: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]])