用最小值对numpy矩阵进行排序,并在矩阵的对角线上显示最小值

时间:2016-11-29 22:02:02

标签: python numpy matrix

无论其他元素如何定位,重要的只是沿对角线的值。

例如我有矩阵:

matrix = [[1, 3, 2],
          [2, 5, -9],
          [3, 4, 6]]

我想要达到的目标与:

相同
[[-9, 3, 2],
 [6, 1, 5],
 [3, 4, 2]]

我试过了:

>>> np_matrix = np.array(matrix)
>>> np_matrix.diagonal()
array([1, 5, 6])

>>> np.sort(np_matrix)
array([[ 1,  2,  3],
       [-9,  2,  5],
       [ 3,  4,  6]])

我认为我可以从这些方法中获得一些东西,但我无法弄清楚如何让它们协同工作。我很感激能得到的所有帮助。

1 个答案:

答案 0 :(得分:1)

我不确定你想要什么。但也许像是

sorted = np.sort(matrix, axis=None) #sorts flattened matrix

现在你重塑了它,然后用第一行改变对角线元素:

sorted.shape = matrix.shape
for i in xrange(1, matrix.shape[0]):  # first element already in order
     sorted[0, i], sorted[i, i] = sorted[i, i], sorted[0, i]

但说实话,我首先会质疑这是否真的是你想要的。它对我来说似乎没什么用。难道不足以获得具有最小元素的数组

diag_lowest = np.sort(matrix, axis=None)[:matrix.shape[0]]

并保持矩阵原样。