Есть ли способ разумно удалять строки нулей, чтобы получить квадратную матрицу в Python? - PullRequest
1 голос
/ 12 июля 2019

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

Для вычисления определителя необходимо вырезать некоторые строки или столбцы матриц.

например, матрица A

A = np.array([[1,1],[2,2],[0,0]])
A
array([[1, 1],
       [2, 2],
       [0, 0]])

нужно вырезать последний ряд

B = A[:2]
B
array([[1, 1],
       [2, 2]])

тогда доступна операция определителя.

np.linalg.det(B)
0.0

то, что нужно вырезать в другой матрице, это столбец, а не строка

C = A.T
C
array([[1, 2, 0],
       [1, 2, 0]])

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

Ответы [ 2 ]

3 голосов
/ 12 июля 2019

Чтобы удалить строки или столбцы с нулевым значением (т. Е. Выбрать строки или столбцы с любым ненулевым значением), вы можете использовать следующее.

A = np.array([[1, 2],
               [0, 0],
               [4, 5]])
B_rows = A[(A != 0).any(1), :]  # Remove rows that are all zero.
>>> B_rows
array([[1, 2],
       [4, 5]])

A = np.array([[1, 2, 0],
               [3, 4, 0]])
B_cols = A[:, (A != 0).any(0)]  # Remove columns that are all zero.
>>> B_cols
array([[1, 2],
       [3, 4]])
1 голос
/ 12 июля 2019

EDIT: Вы должны использовать numpy.delete :

A = np.delete(A,2,1)

Первый параметр - это массив numpy, который необходимо вырезать.Вторым параметром вы ставите индекс столбца, который хотите вырезать.Последний параметр - это ось, вы помещаете туда 0, если хотите удалить строку (как вам удалось сделать в вашем примере), и 1, если вы хотите удалить столбец.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...