根据对角线对numpy矩阵进行排序

mac*_*389 8 python numpy matrix scipy

我有一个矩阵,应该在对角线上有一个但是列混合在一起.

搞砸了矩阵

但是,如果没有明显的for循环,我不知道如何有效地交换行以在对角线上获得统一.我甚至不确定我会通过什么钥匙来排序.

有什么建议?

Joh*_*yon 7

您可以使用numpy argmax来确定目标列排序,并使用argmax结果作为列索引重新排序矩阵:

>>> z = numpy.array([[ 0.1 ,  0.1 ,  1.  ],
...                  [ 1.  ,  0.1 ,  0.09],
...                  [ 0.1 ,  1.  ,  0.2 ]])

numpy.argmax(z, axis=1)

>>> array([2, 0, 1]) #Goal column indices

z[:,numpy.argmax(z, axis=1)]

>>> array([[ 1.  ,  0.1 ,  0.1 ],
...        [ 0.09,  1.  ,  0.1 ],
...        [ 0.2 ,  0.1 ,  1.  ]])
Run Code Online (Sandbox Code Playgroud)