[4 kyu] Matrix Determinant
文章目录
[4 kyu] Matrix DeterminantQuestionSample TestsMy Answer (accepted)Suggested Answer
Question
Sample Tests
My Answer (accepted)
"""
Matrix Determinant (n*n)
Calculate the determinant with Laplace expansion method
"""
def get_M(x_index
, y_index
, matrix
):
"""
Get a remainder of the determinant
"""
M_ans
= []
for row
in range(len(matrix
)):
element_tmp
= []
if x_index
== row
:
continue
for column
in range(len(matrix
[row
])):
if y_index
== column
:
continue
element_tmp
.append
(matrix
[row
][column
])
M_ans
.append
(element_tmp
)
return M_ans
def determinant(matrix
):
"""
Calculate the determinant with Laplace expansion method
"""
if len(matrix
) == 1:
return matrix
[0][0]
elif len(matrix
) == 2:
return matrix
[0][0]*matrix
[1][1] - matrix
[0][1]*matrix
[1][0]
else:
ans
= 0
for i
in range(len(matrix
)):
A_matrix_ans
= (-1)**(0+i
) * determinant
(get_M
(0, i
, matrix
))
ans
+= matrix
[0][i
] * A_matrix_ans
return ans
if __name__
== "__main__":
m0
= [ [2] ]
m1
= [ [1, 3],
[2, 5]]
m2
= [ [2, 5, 3],
[1, -2, -1],
[1, 3, 4]]
print(determinant
(m0
))
Suggested Answer
import numpy
as np
def determinant(a
):
return round(np
.linalg
.det
(np
.matrix
(a
)))
def determinant(m
):
a
= 0
if len(m
) == 1:
a
= m
[0][0]
else:
for n
in xrange(len(m
)):
if (n
+ 1) % 2 == 0:
a
-= m
[0][n
] * determinant
([o
[:n
] + o
[n
+1:] for o
in m
[1:]])
else:
a
+= m
[0][n
] * determinant
([o
[:n
] + o
[n
+1:] for o
in m
[1:]])
return a
转载请注明原文地址:https://blackberry.8miu.com/read-41500.html