From 975ef57e4b23b6254615811b44c23e2c7144c571 Mon Sep 17 00:00:00 2001 From: wuyudi Date: Mon, 6 Jul 2020 03:28:07 +0800 Subject: [PATCH 1/5] enhance the ability of add --- matrix/matrix_operation.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/matrix/matrix_operation.py b/matrix/matrix_operation.py index 002ce6b05f9f..4c97be79f22a 100644 --- a/matrix/matrix_operation.py +++ b/matrix/matrix_operation.py @@ -5,17 +5,20 @@ from typing import List, Tuple -def add(matrix_a: List[list], matrix_b: List[list]) -> List[list]: +def add(*matrix_s: List[list]) -> List[list]: """ >>> add([[1,2],[3,4]],[[2,3],[4,5]]) [[3, 5], [7, 9]] >>> add([[1.2,2.4],[3,4]],[[2,3],[4,5]]) [[3.2, 5.4], [7, 9]] + >>> add([[1, 2], [4, 5]], [[3, 7], [3, 4]], [[3, 5], [5, 7]]) + [[7, 14], [12, 16]] """ - if _check_not_integer(matrix_a) and _check_not_integer(matrix_b): - _verify_matrix_sizes(matrix_a, matrix_b) - return [[i + j for i, j in zip(m, n)] for m, n in zip(matrix_a, matrix_b)] - + if all(map(_check_not_integer, matrix_s)): + a, *b = matrix_s + for matrix in b: + _verify_matrix_sizes(a, matrix) + return [[sum(t) for t in zip(*m)] for m in zip(*matrix_s)] def subtract(matrix_a: List[list], matrix_b: List[list]) -> List[list]: """ @@ -26,7 +29,7 @@ def subtract(matrix_a: List[list], matrix_b: List[list]) -> List[list]: """ if _check_not_integer(matrix_a) and _check_not_integer(matrix_b): _verify_matrix_sizes(matrix_a, matrix_b) - return [[i - j for i, j in zip(m, n)] for m, n in zip(matrix_a, matrix_b)] + return [[i - j for i, j in zip(*m)] for m in zip(matrix_a, matrix_b)] def scalar_multiply(matrix: List[list], n: int) -> List[list]: From cee63b20fb1e8336b407fe7321677bf16cce22f1 Mon Sep 17 00:00:00 2001 From: wuyudi Date: Mon, 6 Jul 2020 03:35:14 +0800 Subject: [PATCH 2/5] Update matrix_operation.py --- matrix/matrix_operation.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/matrix/matrix_operation.py b/matrix/matrix_operation.py index 4c97be79f22a..9e9a03394607 100644 --- a/matrix/matrix_operation.py +++ b/matrix/matrix_operation.py @@ -20,6 +20,7 @@ def add(*matrix_s: List[list]) -> List[list]: _verify_matrix_sizes(a, matrix) return [[sum(t) for t in zip(*m)] for m in zip(*matrix_s)] + def subtract(matrix_a: List[list], matrix_b: List[list]) -> List[list]: """ >>> subtract([[1,2],[3,4]],[[2,3],[4,5]]) @@ -100,8 +101,8 @@ def minor(matrix: List[list], row: int, column: int) -> List[list]: >>> minor([[1, 2], [3, 4]], 1, 1) [[1]] """ - minor = matrix[:row] + matrix[row + 1 :] - return [row[:column] + row[column + 1 :] for row in minor] + minor = matrix[:row] + matrix[row + 1:] + return [row[:column] + row[column + 1:] for row in minor] def determinant(matrix: List[list]) -> int: @@ -154,7 +155,8 @@ def _shape(matrix: List[list]) -> list: return list((len(matrix), len(matrix[0]))) -def _verify_matrix_sizes(matrix_a: List[list], matrix_b: List[list]) -> Tuple[list]: +def _verify_matrix_sizes( + matrix_a: List[list], matrix_b: List[list]) -> Tuple[list]: shape = _shape(matrix_a) shape += _shape(matrix_b) if shape[0] != shape[2] or shape[1] != shape[3]: @@ -168,9 +170,12 @@ def _verify_matrix_sizes(matrix_a: List[list], matrix_b: List[list]) -> Tuple[li def main(): matrix_a = [[12, 10], [3, 9]] matrix_b = [[3, 4], [7, 4]] - matrix_c = [[11, 12, 13, 14], [21, 22, 23, 24], [31, 32, 33, 34], [41, 42, 43, 44]] + matrix_c = [[11, 12, 13, 14], [21, 22, 23, 24], + [31, 32, 33, 34], [41, 42, 43, 44]] matrix_d = [[3, 0, 2], [2, 0, -2], [0, 1, 1]] - print(f"Add Operation, {matrix_a} + {matrix_b} = {add(matrix_a, matrix_b)} \n") + print( + f"Add Operation, {matrix_a} + {matrix_b} =" + f"{add(matrix_a, matrix_b)} \n") print( f"Multiply Operation, {matrix_a} * {matrix_b}", f"= {multiply(matrix_a, matrix_b)} \n", From 5a892dc3bae5533f0977496e543e286784e8a4e1 Mon Sep 17 00:00:00 2001 From: wuyudi Date: Mon, 6 Jul 2020 12:32:10 +0800 Subject: [PATCH 3/5] Update matrix_operation.py --- matrix/matrix_operation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matrix/matrix_operation.py b/matrix/matrix_operation.py index 9e9a03394607..d62312e4a444 100644 --- a/matrix/matrix_operation.py +++ b/matrix/matrix_operation.py @@ -156,7 +156,7 @@ def _shape(matrix: List[list]) -> list: def _verify_matrix_sizes( - matrix_a: List[list], matrix_b: List[list]) -> Tuple[list]: + matrix_a: List[list], matrix_b: List[list]) -> Tuple[list]: shape = _shape(matrix_a) shape += _shape(matrix_b) if shape[0] != shape[2] or shape[1] != shape[3]: From fc7da010ed8a0fa70d5080882403f64cae293c79 Mon Sep 17 00:00:00 2001 From: wuyudi Date: Mon, 6 Jul 2020 19:02:31 +0800 Subject: [PATCH 4/5] Update matrix_operation.py --- matrix/matrix_operation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matrix/matrix_operation.py b/matrix/matrix_operation.py index d62312e4a444..9e9a03394607 100644 --- a/matrix/matrix_operation.py +++ b/matrix/matrix_operation.py @@ -156,7 +156,7 @@ def _shape(matrix: List[list]) -> list: def _verify_matrix_sizes( - matrix_a: List[list], matrix_b: List[list]) -> Tuple[list]: + matrix_a: List[list], matrix_b: List[list]) -> Tuple[list]: shape = _shape(matrix_a) shape += _shape(matrix_b) if shape[0] != shape[2] or shape[1] != shape[3]: From e57cf3cfccbe9120c3af578c4723fd4a193d6711 Mon Sep 17 00:00:00 2001 From: wuyudi Date: Mon, 6 Jul 2020 19:39:08 +0800 Subject: [PATCH 5/5] Update matrix/matrix_operation.py Co-authored-by: Christian Clauss --- matrix/matrix_operation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matrix/matrix_operation.py b/matrix/matrix_operation.py index 9e9a03394607..da4e4be11c15 100644 --- a/matrix/matrix_operation.py +++ b/matrix/matrix_operation.py @@ -14,7 +14,7 @@ def add(*matrix_s: List[list]) -> List[list]: >>> add([[1, 2], [4, 5]], [[3, 7], [3, 4]], [[3, 5], [5, 7]]) [[7, 14], [12, 16]] """ - if all(map(_check_not_integer, matrix_s)): + if all(_check_not_integer(m) for m in matrix_s): a, *b = matrix_s for matrix in b: _verify_matrix_sizes(a, matrix)