From 4e18ac50d265227424d8c2ec513c8d9cedcba359 Mon Sep 17 00:00:00 2001 From: Xanonymous Date: Tue, 9 Jun 2020 16:12:43 +0800 Subject: [PATCH] 1.2.0 --- .gitignore | 1 + .vscode/settings.json | 3 +++ README.md | 2 +- setup.py | 2 +- xmatrix/identity_matrix.py | 16 ++++++++++++++++ xmatrix/matrix.py | 29 +++++++---------------------- 6 files changed, 29 insertions(+), 24 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 xmatrix/identity_matrix.py diff --git a/.gitignore b/.gitignore index 5a7763a..89de13f 100644 --- a/.gitignore +++ b/.gitignore @@ -130,3 +130,4 @@ dmypy.json #IDE files .idea/ +.vscode \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..988937c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.pythonPath": "/usr/local/bin/python3" +} \ No newline at end of file diff --git a/README.md b/README.md index 4131211..0e0e1cd 100644 --- a/README.md +++ b/README.md @@ -182,7 +182,7 @@ print(my_matrix.raw) #### get identity Matrix ```python -i = Mx.UnitMatrix(3) +i = Mx.IdentityMatrix(3) #result: print(i) diff --git a/setup.py b/setup.py index 3de6cd7..1d29e39 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setup( name="xmatrix", - version="1.1.3", + version="1.2.0", author="Xanonymous", author_email="trusaidlin@gmail.com", description="Help you calculate matrix.", diff --git a/xmatrix/identity_matrix.py b/xmatrix/identity_matrix.py new file mode 100644 index 0000000..ecb26b5 --- /dev/null +++ b/xmatrix/identity_matrix.py @@ -0,0 +1,16 @@ +from .matrix import * + + +class IdentityMatrix(Matrix): + def __init__(self, n): + tmp_n = n + tmp = list() + while tmp_n: + tmp_tmp = list() + m = n + while m: + tmp_tmp.insert(0, 1 if m == tmp_n else 0) + m -= 1 + tmp.insert(0, tmp_tmp) + tmp_n -= 1 + super().__init__(tmp) diff --git a/xmatrix/matrix.py b/xmatrix/matrix.py index 1b9b59b..bb45766 100644 --- a/xmatrix/matrix.py +++ b/xmatrix/matrix.py @@ -33,6 +33,8 @@ def __init__(self, u: str or list): def __str__(self): return self.__pretty(self.__storage) + __repr__ = __str__ + def __del__(self): del self @@ -73,7 +75,7 @@ def __mul__(self, other): self.__error_handler("Cannot be multiplied.") return # if the second matrix is an identity_matrix, the answer will be the same as first matrix. - if self.is_unit_matrix(resource): + if self.is_identity_matrix(resource): new = self.__make_copy(self.__storage) return Matrix(new) new = list() @@ -92,7 +94,7 @@ def __rmul__(self, other): def __pow__(self, power: int, modulo=None): # if self is an identity matrix or power assign 1, than return self. - if self.is_unit_matrix(self.__storage) or power == 1: + if self.is_identity_matrix(self.__storage) or power == 1: return Matrix(self.__make_copy(self.__storage)) # if power == 0, than return identity matrix. if not power: @@ -149,7 +151,8 @@ def inverse(self): ans_tmp = list() for j, y in enumerate(x): h = (-1 if i % 2 else 1) * (-1 if j % 2 else 1) - ans_tmp.append(h * self.__determinant(self.__get_ans_range(i, j, new))) + ans_tmp.append( + h * self.__determinant(self.__get_ans_range(i, j, new))) ans.append(ans_tmp) ans = self.__transpose(ans) return Matrix(self.__rate(ans, 1 / determinant)) @@ -212,7 +215,7 @@ def __transpose(resource: list) -> list: return list(map(list, zip(*resource))) @staticmethod - def is_unit_matrix(resource: list) -> bool: + def is_identity_matrix(resource: list) -> bool: for i, x in enumerate(resource): for j, y in enumerate(x): if i == j and resource[i][j] != 1: @@ -262,21 +265,3 @@ def __get_near_number(self, data: float, pos: int) -> int or float: if not isclose(data, round(data, pos), rel_tol=1e-4): return round(data, pos + 1) return self.__get_near_number(data, pos - 1) - - -class UnitMatrix(Matrix): - def __init__(self, n): - tmp_n = n - tmp = list() - while tmp_n: - tmp_tmp = list() - m = n - while m: - tmp_tmp.insert(0, 1 if m == tmp_n else 0) - m -= 1 - tmp.insert(0, tmp_tmp) - tmp_n -= 1 - super().__init__(tmp) - - def __str__(self): - return super().__str__()