Как написать функцию для перестановки столбцов матрицы, чтобы преобразовать ее в треугольную?
Нужно написать функцию, которая на вход будет принимать двухмерный массив, а возвращать этот же массив, только с перестановленными столбцами, чтобы в результате получилась треугольная матрица.
Пример входных данных:
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.