@@ -15,9 +15,8 @@ def add(*matrix_s: List[list]) -> List[list]:
15
15
[[7, 14], [12, 16]]
16
16
"""
17
17
if all (_check_not_integer (m ) for m in matrix_s ):
18
- a , * b = matrix_s
19
- for matrix in b :
20
- _verify_matrix_sizes (a , matrix )
18
+ for i in matrix_s [1 :]:
19
+ _verify_matrix_sizes (matrix_s [0 ], i )
21
20
return [[sum (t ) for t in zip (* m )] for m in zip (* matrix_s )]
22
21
23
22
@@ -28,8 +27,9 @@ def subtract(matrix_a: List[list], matrix_b: List[list]) -> List[list]:
28
27
>>> subtract([[1,2.5],[3,4]],[[2,3],[4,5.5]])
29
28
[[-1, -0.5], [-1, -1.5]]
30
29
"""
31
- if _check_not_integer (matrix_a ) and _check_not_integer (matrix_b ):
32
- _verify_matrix_sizes (matrix_a , matrix_b )
30
+ if _check_not_integer (matrix_a )\
31
+ and _check_not_integer (matrix_b )\
32
+ and _verify_matrix_sizes (matrix_a , matrix_b ):
33
33
return [[i - j for i , j in zip (* m )] for m in zip (matrix_a , matrix_b )]
34
34
35
35
@@ -49,25 +49,19 @@ def multiply(matrix_a: List[list], matrix_b: List[list]) -> List[list]:
49
49
[[19, 15], [43, 35]]
50
50
>>> multiply([[1,2.5],[3,4.5]],[[5,5],[7,5]])
51
51
[[22.5, 17.5], [46.5, 37.5]]
52
+ >>> multiply([[1, 2, 3]], [[2], [3], [4]])
53
+ [[20]]
52
54
"""
53
55
if _check_not_integer (matrix_a ) and _check_not_integer (matrix_b ):
54
- matrix_c = []
55
56
rows , cols = _verify_matrix_sizes (matrix_a , matrix_b )
56
57
57
- if cols [0 ] != rows [1 ]:
58
- raise ValueError (
59
- f"Cannot multiply matrix of dimensions ({ rows [0 ]} ,{ cols [0 ]} ) "
60
- f"and ({ rows [1 ]} ,{ cols [1 ]} )"
61
- )
62
- for i in range (rows [0 ]):
63
- list_1 = []
64
- for j in range (cols [1 ]):
65
- val = 0
66
- for k in range (cols [1 ]):
67
- val += matrix_a [i ][k ] * matrix_b [k ][j ]
68
- list_1 .append (val )
69
- matrix_c .append (list_1 )
70
- return matrix_c
58
+ if cols [0 ] != rows [1 ]:
59
+ raise ValueError (
60
+ f"Cannot multiply matrix of dimensions ({ rows [0 ]} ,{ cols [0 ]} ) "
61
+ f"and ({ rows [1 ]} ,{ cols [1 ]} )"
62
+ )
63
+ return [[sum (m * n for m , n in zip (i , j )) for j in zip (* matrix_b )]
64
+ for i in matrix_a ]
71
65
72
66
73
67
def identity (n : int ) -> List [list ]:
@@ -93,16 +87,16 @@ def transpose(matrix: List[list], return_map: bool = True) -> List[list]:
93
87
if return_map :
94
88
return map (list , zip (* matrix ))
95
89
else :
96
- return [[ row [ i ] for row in matrix ] for i in range ( len ( matrix [ 0 ]))]
90
+ return list ( map ( list , zip ( * matrix )))
97
91
98
92
99
93
def minor (matrix : List [list ], row : int , column : int ) -> List [list ]:
100
94
"""
101
95
>>> minor([[1, 2], [3, 4]], 1, 1)
102
96
[[1]]
103
97
"""
104
- minor = matrix [:row ] + matrix [row + 1 :]
105
- return [row [:column ] + row [column + 1 :] for row in minor ]
98
+ minor = matrix [: row ] + matrix [row + 1 :]
99
+ return [row [:column ] + row [column + 1 :] for row in minor ]
106
100
107
101
108
102
def determinant (matrix : List [list ]) -> int :
@@ -115,10 +109,8 @@ def determinant(matrix: List[list]) -> int:
115
109
if len (matrix ) == 1 :
116
110
return matrix [0 ][0 ]
117
111
118
- res = 0
119
- for x in range (len (matrix )):
120
- res += matrix [0 ][x ] * determinant (minor (matrix , 0 , x )) * (- 1 ) ** x
121
- return res
112
+ return sum (x * determinant (minor (matrix , 0 , i )) * (- 1 ) ** i
113
+ for i , x in enumerate (matrix [0 ]))
122
114
123
115
124
116
def inverse (matrix : List [list ]) -> List [list ]:
@@ -132,10 +124,9 @@ def inverse(matrix: List[list]) -> List[list]:
132
124
if det == 0 :
133
125
return None
134
126
135
- matrix_minor = [[] for _ in matrix ]
136
- for i in range (len (matrix )):
137
- for j in range (len (matrix )):
138
- matrix_minor [i ].append (determinant (minor (matrix , i , j )))
127
+ matrix_minor = [[determinant (minor (matrix , i , j ))
128
+ for j in range (len (matrix ))]
129
+ for i in range (len (matrix ))]
139
130
140
131
cofactors = [
141
132
[x * (- 1 ) ** (row + col ) for col , x in enumerate (matrix_minor [row ])]
@@ -152,29 +143,29 @@ def _check_not_integer(matrix: List[list]) -> bool:
152
143
153
144
154
145
def _shape (matrix : List [list ]) -> list :
155
- return list (( len (matrix ), len (matrix [0 ])) )
146
+ return len (matrix ), len (matrix [0 ])
156
147
157
148
158
149
def _verify_matrix_sizes (matrix_a : List [list ], matrix_b : List [list ]) -> Tuple [list ]:
159
- shape = _shape (matrix_a )
160
- shape += _shape (matrix_b )
161
- if shape [0 ] != shape [2 ] or shape [1 ] != shape [3 ]:
150
+ shape = _shape (matrix_a ) + _shape (matrix_b )
151
+ if shape [0 ] != shape [3 ] or shape [1 ] != shape [2 ]:
162
152
raise ValueError (
163
153
f"operands could not be broadcast together with shape "
164
154
f"({ shape [0 ], shape [1 ]} ), ({ shape [2 ], shape [3 ]} )"
165
155
)
166
- return [ shape [0 ], shape [2 ]], [ shape [1 ], shape [3 ]]
156
+ return ( shape [0 ], shape [2 ]), ( shape [1 ], shape [3 ])
167
157
168
158
169
159
def main ():
170
160
matrix_a = [[12 , 10 ], [3 , 9 ]]
171
161
matrix_b = [[3 , 4 ], [7 , 4 ]]
172
- matrix_c = [[11 , 12 , 13 , 14 ], [21 , 22 , 23 , 24 ], [31 , 32 , 33 , 34 ], [41 , 42 , 43 , 44 ]]
162
+ matrix_c = [[11 , 12 , 13 , 14 ], [21 , 22 , 23 , 24 ],
163
+ [31 , 32 , 33 , 34 ], [41 , 42 , 43 , 44 ]]
173
164
matrix_d = [[3 , 0 , 2 ], [2 , 0 , - 2 ], [0 , 1 , 1 ]]
174
- print (f"Add Operation, { matrix_a } + { matrix_b } =" f"{ add (matrix_a , matrix_b )} \n " )
175
165
print (
176
- f"Multiply Operation, { matrix_a } * { matrix_b } " ,
177
- f"= { multiply (matrix_a , matrix_b )} \n " ,
166
+ f"Add Operation, { add (matrix_a , matrix_b ) = } \n " )
167
+ print (
168
+ f"Multiply Operation, { multiply (matrix_a , matrix_b ) = } \n " ,
178
169
)
179
170
print (f"Identity: { identity (5 )} \n " )
180
171
print (f"Minor of { matrix_c } = { minor (matrix_c , 1 , 2 )} \n " )
0 commit comments