使用 Python 建立矩陣運算系統的程式,包括抽象類別 Matrix 以及實作類別 MatrixMultiply 和 MatrixAdd:
from abc import ABC, abstractmethod
class Matrix(ABC):
def __init__(self):
self._matrix1 = None
self._matrix2 = None
self._resultM = None
def setMatrix(self, matrix1, matrix2):
self._matrix1 = matrix1
self._matrix2 = matrix2
@abstractmethod
def checkDimension(self):
pass
@abstractmethod
def matrixOperation(self):
pass
def __str__(self):
return (f"Matrix 1:\n{self._matrix1}\n\n"
f"Matrix 2:\n{self._matrix2}\n\n"
f"Result Matrix:\n{self._resultM}\n")
class MatrixMultiply(Matrix):
def __init__(self, matrix1=None, matrix2=None):
super().__init__()
if matrix1 is not None and matrix2 is not None:
self.setMatrix(matrix1, matrix2)
def checkDimension(self):
if self._matrix1 is None or self._matrix2 is None:
return False
return len(self._matrix1[0]) == len(self._matrix2)
def matrixOperation(self):
if not self.checkDimension():
self._resultM = None
return None
result_rows = len(self._matrix1)
result_cols = len(self._matrix2[0])
self._resultM = [[0 for _ in range(result_cols)] for _ in range(result_rows)]
for i in range(result_rows):
for j in range(result_cols):
for k in range(len(self._matrix2)):
self._resultM[i][j] += self._matrix1[i][k] * self._matrix2[k][j]
return self._resultM
class MatrixAdd(Matrix):
def __init__(self, matrix1=None, matrix2=None):
super().__init__()
if matrix1 is not None and matrix2 is not None:
self.setMatrix(matrix1, matrix2)
def checkDimension(self):
if self._matrix1 is None or self._matrix2 is None:
return False
return (len(self._matrix1) == len(self._matrix2) and
len(self._matrix1[0]) == len(self._matrix2[0]))
def matrixOperation(self):
if not self.checkDimension():
self._resultM = None
return None
rows = len(self._matrix1)
cols = len(self._matrix1[0])
self._resultM = [[self._matrix1[i][j] + self._matrix2[i][j] for j in range(cols)] for i in range(rows)]
return self._resultM
# 測試
if __name__ == "__main__":
matrix1 = [[1, 2], [3, 4]]
matrix2 = [[5, 6], [7, 8]]
matrix3 = [[1, 2], [3, 4], [5, 6]]
# 測試矩陣乘法
multiply_test = MatrixMultiply(matrix1, matrix2)
multiply_test.matrixOperation()
print(multiply_test)
# 測試矩陣加法
add_test = MatrixAdd(matrix1, matrix2)
add_test.matrixOperation()
print(add_test)
# 測試不符合維度的情況
invalid_multiply_test = MatrixMultiply(matrix1, matrix3)
invalid_multiply_test.matrixOperation()
print(invalid_multiply_test)
說明:
抽象類別 Matrix:
包含三個矩陣變數:_matrix1, _matrix2, _resultM。
定義了抽象方法 checkDimension() 和 matrixOperation()。
提供了 setMatrix() 方法來設置矩陣,以及 __str__() 方法來顯示矩陣內容。
類別 MatrixMultiply:
繼承自 Matrix。
實作了 checkDimension() 方法來檢查矩陣乘法的維度。
實作了 matrixOperation() 方法來執行矩陣乘法運算。
類別 MatrixAdd:
繼承自 Matrix。
實作了 checkDimension() 方法來檢查矩陣加法的維度。
實作了 matrixOperation() 方法來執行矩陣加法運算。
測試:
在主程式中創建 MatrixMultiply 和 MatrixAdd 的實例,並測試其功能。