Skip to content

Commit b66df15

Browse files
committed
Updated the class in the .py file and added more instructive methods.
1 parent 6d11538 commit b66df15

File tree

1 file changed

+30
-2
lines changed

1 file changed

+30
-2
lines changed

Diff for: Matrices.py

+30-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
#!/usr/bin/env python3
2+
3+
14
class Matrix:
25
"""A simple wrapper around a two-dimensional list"""
36

@@ -38,7 +41,7 @@ def __sub__(self, other):
3841

3942
def update_order(self):
4043
self.order = (len(self._lst), len(self._lst[0]))
41-
# количество строк, количество столбцов
44+
# quantity of rows, quantity of columns
4245

4346
def __matmul__(self, multiplier):
4447
if self.order[1] != multiplier.order[0]:
@@ -62,7 +65,32 @@ def __imatmul__(self, multiplier):
6265
return Matrix(self._lst)
6366

6467
def transpose(self):
65-
self._lst = list(zip(*self._lst))
68+
if self.order[0] == self.order[1]:
69+
self._transpose_fast()
70+
else:
71+
self._lst = list(zip(*self._lst))
72+
73+
def _transpose_fast(self):
74+
try:
75+
assert self.order[0] == self.order[1]
76+
except AssertionError:
77+
msg = "Fast transpose for non-square matrices is not implemented"
78+
raise NotImplementedError(msg)
79+
80+
for j in range(self.order[0]):
81+
for k in range(self.order[1]):
82+
self._lst[j][k] = self._lst[k][j]
83+
84+
def main_diagonal(self):
85+
cnt = min(self.order)
86+
return (self[k][k] for k in range(cnt))
87+
88+
def antidiagonal(self):
89+
cnt = min(self.order)
90+
return (self[cnt-k-1][k] for k in range(cnt))
91+
92+
def trace(self):
93+
return sum(self.main_diagonal())
6694

6795
def arithmetic_mean(self):
6896
s, cnt = 0, 0

0 commit comments

Comments
 (0)