Как написать функцию для перестановки столбцов матрицы, чтобы преобразовать ее в треугольную?

Нужно написать функцию, которая на вход будет принимать двухмерный массив, а возвращать этот же массив, только с перестановленными столбцами, чтобы в результате получилась треугольная матрица.

Пример входных данных:

matrix = np.array([
    [3, 2, -5],
    [3, 0, 0],
    [0, 1, 0]])

На выходе нужно получить:

[[ -5.  3. 2.]
[ 0.  3.  0.]
[ 0.  0.  1.]]

Ответы (1 шт):

Автор решения: MaxU

попробуйте так:

res = matrix[:, ((matrix==0) * np.power(10, range(len(matrix)))
                                 .reshape(-1, 1))
                .sum(axis=0)
                .argsort()
                [::-1]
]

результат:

In [219]: res
Out[219]: 
array([[-5,  3,  2],
       [ 0,  3,  0],
       [ 0,  0,  1]])

PS если у вас есть значения стремящиеся к нулю, тогда лучше воспользоваться np.isclose(matrix, 0, atol=1e-07) вместо строгого сравнения matrix==0.

→ Ссылка