-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain_matrix_funcs.py
More file actions
81 lines (72 loc) · 2.69 KB
/
main_matrix_funcs.py
File metadata and controls
81 lines (72 loc) · 2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
def transpose_matrix(matrix: list[list]) -> list[list]:
transposed_matrix = [[0 for i in range(len(matrix))] for i in range(len(matrix[0]))]
for i in range(len(matrix)):
for j in range(len(matrix[0])):
transposed_matrix[j][i] = matrix[i][j]
return transposed_matrix
def rank_of_matrix(matrix: list[list]) -> int:
rank = min(len(matrix), len(matrix[0]))
row_index = 0
for i in range(len(matrix[0])):
found_nonzero = False
for j in range(row_index, len(matrix)):
if matrix[j][i] != 0:
found_nonzero = True
matrix[row_index], matrix[j] = matrix[j], matrix[row_index]
break
if found_nonzero:
for j in range(row_index + 1, len(matrix)):
factor = matrix[j][i] / matrix[row_index][i]
for k in range(i, len(matrix[0])):
matrix[j][k] -= matrix[row_index][k] * factor
row_index += 1
return rank
def inverse_matrix(matrix: list[list]) -> list[list]:
augmented_matrix = [
[
matrix[i][j] if j < len(matrix) else int(i == j - len(matrix))
for j in range(2 * len(matrix))
]
for i in range(len(matrix))
]
for i in range(len(matrix)):
pivot = augmented_matrix[i][i]
if pivot == 0:
raise ValueError("Matrix is not invertible")
for j in range(2 * len(matrix)):
augmented_matrix[i][j] /= pivot
for j in range(len(matrix)):
if i != j:
scalar = augmented_matrix[j][i]
for k in range(2 * len(matrix)):
augmented_matrix[j][k] -= scalar * augmented_matrix[i][k]
inverse = [
[augmented_matrix[i][j] for j in range(len(matrix), 2 * len(matrix))]
for i in range(len(matrix))
]
return inverse
def multiply_matrix(matrix: list[list], n: int) -> list[list]:
result = []
for i in matrix:
new_row = []
for j in i:
new_element = j * n
new_row.append(new_element)
result.append(new_row)
return result
def exponentiate_matrix(matrix: list[list], n: int) -> list[list]:
if n < 0:
raise ValueError("Exponent must be non-negative")
result = [[int(i == j) for j in range(len(matrix))] for i in range(len(matrix))]
for i in range(n):
temp = []
for j in range(len(matrix)):
row = []
for k in range(len(matrix)):
element = 0
for e in range(len(matrix)):
element += result[j][e] * matrix[e][k]
row.append(element)
temp.append(row)
result = temp
return result