Надо выбрать из матрицы диагональные элементы
Пытаюсь выбрать из матрицы элементы на главной диагонали с тем, чтобы следом реализовать функционал расчета определителя матрицы по формуле:
a11*a22*a33 + a12*a23*a31 + a21*a13*a32 - a31*a22*a13 - a12*a21*a33 - a11*a23*a32.
В результате обхода строк и колонок матрицы получаю ошибку:
arrays used as indices must be of integer (or boolean) type
То есть:
массивы, используемые в качестве индексов, должны быть целочисленного (или логического) типа.
Почитал: пишут, что проблема в пустом массиве; советуют явно в нем задать тип float (вроде того: list_plus_1=np.array([], dtype=float)), однако не работает. Есть идеи, как записать в пустой список диагональные элементы?
import numpy as np
def det(matrix):
list_plus_1=np.array([])
for rows in matrix[:,:3]:
for columns in matrix[rows]:
if columns == matrix[columns][columns]:
list_plus_1.append(columns)
print(list_plus_1)
matrix = np.array([[3.8, 6.7, -1.2, 5.2],
[6.4, 1.3, -2.7, 3.8],
[2.4, -4.5, 3.5, -0.6]])
det(matrix)
Ответы (3 шт):
Реализовал вот такой код
def det(matrix):
list_plus_1=[]
for nrow, row in enumerate(matrix[:,:3]):
elem = row[nrow]
list_plus_1.append(elem)
print(list_plus_1)
import numpy as np
matrix = np.array([[3.8, 6.7, -1.2, 5.2],
[6.4, 1.3, -2.7, 3.8],
[2.4, -4.5, 3.5, -0.6]])
print(np.diag(matrix))
[3.8 1.3 3.5]
np.diag может принимать параметры. читайте документацию.
def det(matrix):
list_diag = []
for i in range(len(matrix)):
list_diag.append(matrix[i][i])
return list_diag