- 什么是矩陣(Matrix)







代碼實現:

1.在 Matrix.py中編寫代碼:
1 #矩陣類 2 from playLA.Vector import Vector 3 4 5 class Matrix: 6 # 餐數2:二維數組 7 def __init__(self, list2d): 8 self._values = [row[:] for row in list2d]#將數組變為矩陣 9 10 #返回矩陣的第index個行向量 11 def row_vector(self,index): 12 return Vector(self._values[index]) 13 14 # 返回矩陣的第index個列向量 15 def col_vector(self, index): 16 return Vector([row[index] for row in self._values]) 17 18 #返回矩陣pos位置的元素(根據元素的位置取元素值) :參數2:元組 19 def __getitem__(self, pos): 20 r,c = pos 21 return self._values[r][c] 22 23 #返回矩陣的元素個數 24 def size(self): 25 r,c = self.shape() 26 return r*c 27 28 #返回矩陣行數 29 def row_num(self): 30 return self.shape()[0] 31 32 __len__ = row_num 33 34 #返回矩陣列數 35 def col_num(self): 36 return self.shape()[1] 37 38 #返回矩陣形狀:(行數,列數) 39 def shape(self): 40 return len(self._values),len(self._values[0]) 41 42 #矩陣展示 43 def __repr__(self): 44 return "Matrix({})".format(self._values) 45 46 __str__ = __repr__
2.在main_matrix.py編寫代碼:
1 from playLA.Matrix import Matrix 2 3 if __name__ == "__main__": 4 #生成一個矩陣 5 matrix = Matrix([[1,2],[3,4]]) 6 print(matrix) 7 #矩陣的行數和列數(返回矩陣形狀:(行數,列數)) 8 print("matrix.shape = {}".format(matrix.shape())) 9 #返回矩陣的元素個數 10 print("matrix.size = {}".format(matrix.size())) 11 print("len(matrix) = {}".format(len(matrix))) 12 #根據元素的位置取元素值 13 print("matrix[0][0] = {}".format(matrix[0,0])) 14 # 返回矩陣的第index個行向量 15 print("matrix.row_vector = {}".format(matrix.row_vector(0))) 16 # 返回矩陣的第index個列向量 17 print("matrix.col_vector = {}".format(matrix.col_vector(0)))
3.運行main_matrix.py結果為:
1 /Users/liuxiaoming/PycharmProjects/LinearAlgebra/venv/bin/python /Applications/PyCharm.app/Contents/plugins/python/helpers/pydev/pydevconsole.py --mode=client --port=62627 2 import sys; print('Python %s on %s' % (sys.version, sys.platform)) 3 sys.path.extend(['/Users/liuxiaoming/PycharmProjects/LinearAlgebra']) 4 PyDev console: starting. 5 Python 3.8.2 (v3.8.2:7b3ab5921f, Feb 24 2020, 17:52:18) 6 [Clang 6.0 (clang-600.0.57)] on darwin 7 >>> runfile('/Users/liuxiaoming/PycharmProjects/LinearAlgebra/main_matrix.py', wdir='/Users/liuxiaoming/PycharmProjects/LinearAlgebra') 8 Matrix([[1, 2], [3, 4]]) 9 matrix.shape = (2, 2) 10 matrix.size = 4 11 len(matrix) = 2 12 matrix[0][0] = 1 13 matrix.row_vector = (1, 2) 14 matrix.col_vector = (1, 3)
- 矩陣的基本運算


矩陣加法:


矩陣數量乘法:





證明:


代碼實現:

1.在 Matrix.py中編寫代碼:
1 #矩陣類 2 from playLA.Vector import Vector 3 4 5 class Matrix: 6 # 參數2:二維數組 7 def __init__(self, list2d): 8 self._values = [row[:] for row in list2d]#將數組變為矩陣 9 10 #矩陣類方法:返回一個r行c列的零矩陣:參數1:為零的類對象 11 @classmethod 12 def zero(cls,r,c): 13 return cls([[0] * c for _ in range(r)]) #創建一個r行c列為零的一個列表 14 15 #返回兩個矩陣的加法結果 16 def __add__(self, another): 17 # 校驗兩個矩陣的形狀為一致(行數、列數一致) 18 assert self.shape() == another.shape(), \ 19 "Error in adding. Shape of matrix must be same." 20 # 根據矩陣的加法公式:兩個矩陣對應的每一行的每一個元素相加,獲得新的矩陣(遍歷兩個矩陣對應的每一個行每個元素進行相加<第二步>,外部再遍歷該矩陣的行數(循環的次數)<第一步>) 21 return Matrix([[a+b for a,b in zip(self.row_vector(i),another.row_vector(i))] 22 for i in range(self.row_num())]) 23 24 # 返回兩個矩陣的減法結果 25 def __sub__(self, another): 26 assert self.shape() == another.shape(), \ 27 "Error in subtracting. Shape of matrix must be same." 28 return Matrix([[a - b for a, b in zip(self.row_vector(i), another.row_vector(i))] 29 for i in range(self.row_num())]) 30 31 #返回矩陣的數量乘結果(矩陣乘以數字):self * k 32 def __mul__(self, k): 33 #通過遍歷每一行的每個元素e后分別乘以k<第一步>,外部再遍歷該矩陣的行數(循環的次數)<第二步> 34 return Matrix([[e * k for e in self.row_vector(i)] 35 for i in range(self.row_num())]) 36 37 # 返回矩陣的數量乘結果(數字乘以矩陣):k * self 38 def __rmul__(self, k): 39 return self * k 40 41 #返回數量除法的結果矩陣:self / k 42 def __truediv__(self, k): 43 return (1 / k) * self 44 45 #返回矩陣取正的結果 46 def __pos__(self): 47 return 1 * self 48 49 #返回矩陣取負的結果 50 def __neg__(self): 51 return -1 * self 52 53 #返回矩陣的第index個行向量 54 def row_vector(self,index): 55 return Vector(self._values[index]) 56 57 # 返回矩陣的第index個列向量 58 def col_vector(self, index): 59 return Vector([row[index] for row in self._values]) 60 61 #返回矩陣pos位置的元素(根據元素的位置取元素值) :參數2:元組 62 def __getitem__(self, pos): 63 r,c = pos 64 return self._values[r][c] 65 66 #返回矩陣的元素個數 67 def size(self): 68 r,c = self.shape() 69 return r*c 70 71 #返回矩陣行數 72 def row_num(self): 73 return self.shape()[0] 74 75 __len__ = row_num 76 77 #返回矩陣列數 78 def col_num(self): 79 return self.shape()[1] 80 81 #返回矩陣形狀:(行數,列數) 82 def shape(self): 83 return len(self._values),len(self._values[0]) 84 85 #矩陣展示 86 def __repr__(self): 87 return "Matrix({})".format(self._values) 88 89 __str__ = __repr__
2.在main_matrix.py編寫代碼:
1 from playLA.Matrix import Matrix 2 3 if __name__ == "__main__": 4 #生成一個矩陣 5 matrix = Matrix([[1,2],[3,4]]) 6 print(matrix) 7 #矩陣的行數和列數(返回矩陣形狀:(行數,列數)) 8 print("matrix.shape = {}".format(matrix.shape())) 9 #返回矩陣的元素個數 10 print("matrix.size = {}".format(matrix.size())) 11 print("len(matrix) = {}".format(len(matrix))) 12 #根據元素的位置取元素值 13 print("matrix[0][0] = {}".format(matrix[0,0])) 14 # 返回矩陣的第index個行向量 15 print("matrix.row_vector = {}".format(matrix.row_vector(0))) 16 # 返回矩陣的第index個列向量 17 print("matrix.col_vector = {}".format(matrix.col_vector(0))) 18 19 # 返回兩個矩陣的加法結果 20 matrix2 = Matrix([[5,6],[7,8]]) 21 print("add:{}".format(matrix + matrix2)) 22 # 返回兩個矩陣的減法結果 23 print("subtract:{}".format(matrix - matrix2)) 24 #返回矩陣的數量乘結果(矩陣乘以數字):self * k 25 print("scalar-mul:{}".format(matrix * 2)) 26 # 返回矩陣的數量乘結果(數字乘以矩陣):k * self 27 print("scalar-mul:{}".format(2 * matrix)) 28 # 零矩陣類方法:返回一個2行3列的零矩陣 29 print("zero_2_3:{}".format(Matrix.zero(2,3)))
3.運行main_matrix.py結果為:
1 /Users/liuxiaoming/PycharmProjects/LinearAlgebra/venv/bin/python /Applications/PyCharm.app/Contents/plugins/python/helpers/pydev/pydevconsole.py --mode=client --port=62885 2 import sys; print('Python %s on %s' % (sys.version, sys.platform)) 3 sys.path.extend(['/Users/liuxiaoming/PycharmProjects/LinearAlgebra']) 4 PyDev console: starting. 5 Python 3.8.2 (v3.8.2:7b3ab5921f, Feb 24 2020, 17:52:18) 6 [Clang 6.0 (clang-600.0.57)] on darwin 7 runfile('/Users/liuxiaoming/PycharmProjects/LinearAlgebra/main_matrix.py', wdir='/Users/liuxiaoming/PycharmProjects/LinearAlgebra') 8 Matrix([[1, 2], [3, 4]]) 9 matrix.shape = (2, 2) 10 matrix.size = 4 11 len(matrix) = 2 12 matrix[0][0] = 1 13 matrix.row_vector = (1, 2) 14 matrix.col_vector = (1, 3) 15 add:Matrix([[6, 8], [10, 12]]) 16 subtract:Matrix([[-4, -4], [-4, -4]]) 17 scalar-mul:Matrix([[2, 4], [6, 8]]) 18 scalar-mul:Matrix([[2, 4], [6, 8]]) 19 zero_2_3:Matrix([[0, 0, 0], [0, 0, 0]])
- 把矩陣看做是對系統的描述






- 矩陣與向量的乘法










如果矩陣的行數為1時:


- 矩陣與矩陣的乘法









代碼實現:

1.在 Matrix.py中編寫代碼:返回兩個矩陣的乘法結果(矩陣乘以矩陣)
1 #矩陣類 2 from playLA.Vector import Vector 3 4 5 class Matrix: 6 # 參數2:二維數組 7 def __init__(self, list2d): 8 self._values = [row[:] for row in list2d]#將數組變為矩陣 9 10 #矩陣類方法:返回一個r行c列的零矩陣:參數1:為零的類對象 11 @classmethod 12 def zero(cls,r,c): 13 return cls([[0] * c for _ in range(r)]) #創建一個r行c列為零的一個列表 14 15 #返回兩個矩陣的加法結果 16 def __add__(self, another): 17 # 校驗兩個矩陣的形狀為一致(行數、列數一致) 18 assert self.shape() == another.shape(), \ 19 "Error in adding. Shape of matrix must be same." 20 # 根據矩陣的加法公式:兩個矩陣對應的每一行的每一個元素相加,獲得新的矩陣(遍歷兩個矩陣對應的每一個行每個元素進行相加<第二步>,外部再遍歷該矩陣的行數(循環的次數)<第一步>) 21 return Matrix([[a+b for a,b in zip(self.row_vector(i),another.row_vector(i))] 22 for i in range(self.row_num())]) 23 24 # 返回兩個矩陣的減法結果 25 def __sub__(self, another): 26 assert self.shape() == another.shape(), \ 27 "Error in subtracting. Shape of matrix must be same." 28 return Matrix([[a - b for a, b in zip(self.row_vector(i), another.row_vector(i))] 29 for i in range(self.row_num())]) 30 31 #返回兩個矩陣的乘法結果(矩陣乘以矩陣) 32 def dot(self,another): 33 if isinstance(another,Vector):#判斷是否為向量:矩陣與向量的乘法 34 assert self.col_num() == len(another),\ 35 "Error in Matrix_Vector Multiplication." #矩陣與向量的乘法錯誤 36 return Vector([self.row_vector(i).dot(another) for i in range(self.row_num())]) 37 if isinstance(another,Matrix):#判斷是否為矩陣:矩陣與矩陣的乘法 38 assert self.col_num() == another.row_num(),\ 39 "Error in Matrix-Matrix Multiplication." #矩陣與矩陣的乘法錯誤 40 # 將矩陣的每一行與另一矩陣的每一列進行向量間的點乘 41 return Matrix([[self.row_vector(i).dot(another.col_vector(j)) for j in range(another.col_num())] 42 for i in range(self.row_num())]) 43 44 #返回矩陣的數量乘結果(矩陣乘以數字):self * k 45 def __mul__(self, k): 46 #通過遍歷每一行的每個元素e后分別乘以k<第一步>,外部再遍歷該矩陣的行數(循環的次數)<第二步> 47 return Matrix([[e * k for e in self.row_vector(i)] 48 for i in range(self.row_num())]) 49 50 # 返回矩陣的數量乘結果(數字乘以矩陣):k * self 51 def __rmul__(self, k): 52 return self * k 53 54 #返回數量除法的結果矩陣:self / k 55 def __truediv__(self, k): 56 return (1 / k) * self 57 58 #返回矩陣取正的結果 59 def __pos__(self): 60 return 1 * self 61 62 #返回矩陣取負的結果 63 def __neg__(self): 64 return -1 * self 65 66 #返回矩陣的第index個行向量 67 def row_vector(self,index): 68 return Vector(self._values[index]) 69 70 # 返回矩陣的第index個列向量 71 def col_vector(self, index): 72 return Vector([row[index] for row in self._values]) 73 74 #返回矩陣pos位置的元素(根據元素的位置取元素值) :參數2:元組 75 def __getitem__(self, pos): 76 r,c = pos 77 return self._values[r][c] 78 79 #返回矩陣的元素個數 80 def size(self): 81 r,c = self.shape() 82 return r*c 83 84 #返回矩陣行數 85 def row_num(self): 86 return self.shape()[0] 87 88 __len__ = row_num 89 90 #返回矩陣列數 91 def col_num(self): 92 return self.shape()[1] 93 94 #返回矩陣形狀:(行數,列數) 95 def shape(self): 96 return len(self._values),len(self._values[0]) 97 98 #矩陣展示 99 def __repr__(self): 100 return "Matrix({})".format(self._values) 101 102 __str__ = __repr__
2.在main_matrix.py編寫代碼:返回兩個矩陣的乘法結果(矩陣乘以矩陣)
1 from playLA.Matrix import Matrix 2 from playLA.Vector import Vector 3 4 if __name__ == "__main__": 5 #生成一個矩陣 6 matrix = Matrix([[1,2],[3,4]]) 7 print(matrix) 8 #矩陣的行數和列數(返回矩陣形狀:(行數,列數)) 9 print("matrix.shape = {}".format(matrix.shape())) 10 #返回矩陣的元素個數 11 print("matrix.size = {}".format(matrix.size())) 12 print("len(matrix) = {}".format(len(matrix))) 13 #根據元素的位置取元素值 14 print("matrix[0][0] = {}".format(matrix[0,0])) 15 # 返回矩陣的第index個行向量 16 print("matrix.row_vector = {}".format(matrix.row_vector(0))) 17 # 返回矩陣的第index個列向量 18 print("matrix.col_vector = {}".format(matrix.col_vector(0))) 19 20 # 返回兩個矩陣的加法結果 21 matrix2 = Matrix([[5,6],[7,8]]) 22 print("add:{}".format(matrix + matrix2)) 23 # 返回兩個矩陣的減法結果 24 print("subtract:{}".format(matrix - matrix2)) 25 #返回矩陣的數量乘結果(矩陣乘以數字):self * k 26 print("scalar-mul:{}".format(matrix * 2)) 27 # 返回矩陣的數量乘結果(數字乘以矩陣):k * self 28 print("scalar-mul:{}".format(2 * matrix)) 29 # 零矩陣類方法:返回一個2行3列的零矩陣 30 print("zero_2_3:{}".format(Matrix.zero(2,3))) 31 32 # 返回兩個矩陣的乘法結果(矩陣乘以矩陣) 33 T = Matrix([[1.5,0],[0,2]]) 34 p = Vector([5,3]) 35 print("T.dot(p) = {}".format(T.dot(p))) 36 P = Matrix([[0,4,5],[0,0,3]]) 37 print("T.dot(P) = {}".format(T.dot(P))) 38 print("matrix.dot(matrix2) = {}".format(matrix.dot(matrix2))) 39 print("matrix2.dot(matrix) = {}".format(matrix2.dot(matrix)))
3.運行main_matrix.py結果為:
1 /Users/liuxiaoming/PycharmProjects/LinearAlgebra/venv/bin/python /Applications/PyCharm.app/Contents/plugins/python/helpers/pydev/pydevconsole.py --mode=client --port=65252 2 import sys; print('Python %s on %s' % (sys.version, sys.platform)) 3 sys.path.extend(['/Users/liuxiaoming/PycharmProjects/LinearAlgebra']) 4 PyDev console: starting. 5 Python 3.8.2 (v3.8.2:7b3ab5921f, Feb 24 2020, 17:52:18) 6 [Clang 6.0 (clang-600.0.57)] on darwin 7 runfile('/Users/liuxiaoming/PycharmProjects/LinearAlgebra/main_matrix.py', wdir='/Users/liuxiaoming/PycharmProjects/LinearAlgebra') 8 Matrix([[1, 2], [3, 4]]) 9 matrix.shape = (2, 2) 10 matrix.size = 4 11 len(matrix) = 2 12 matrix[0][0] = 1 13 matrix.row_vector = (1, 2) 14 matrix.col_vector = (1, 3) 15 add:Matrix([[6, 8], [10, 12]]) 16 subtract:Matrix([[-4, -4], [-4, -4]]) 17 scalar-mul:Matrix([[2, 4], [6, 8]]) 18 scalar-mul:Matrix([[2, 4], [6, 8]]) 19 zero_2_3:Matrix([[0, 0, 0], [0, 0, 0]]) 20 T.dot(p) = (7.5, 6) 21 T.dot(P) = Matrix([[0.0, 6.0, 7.5], [0, 0, 6]]) 22 matrix.dot(matrix2) = Matrix([[19, 22], [43, 50]]) 23 matrix2.dot(matrix) = Matrix([[23, 34], [31, 46]])
- 矩陣乘法的性質和矩陣的冪



注:由於矩陣 A乘以B 不等於 B乘以A 所以下方的公式無法得出 2AB的概念,只能將該方程拆解為AB + BA
- 矩陣的轉置








代碼實現:矩陣的轉置與Numpy中矩陣的使用

1.在 Matrix.py中編寫代碼:返回矩陣的轉置矩陣
1 #矩陣類 2 from playLA.Vector import Vector 3 4 5 class Matrix: 6 # 參數2:二維數組 7 def __init__(self, list2d): 8 self._values = [row[:] for row in list2d]#將數組變為矩陣 9 10 #矩陣類方法:返回一個r行c列的零矩陣:參數1:為零的類對象 11 @classmethod 12 def zero(cls,r,c): 13 return cls([[0] * c for _ in range(r)]) #創建一個r行c列為零的一個列表 14 15 #返回矩陣的轉置矩陣 16 def T(self): 17 #將每一行的相同位置(每一列)元素提取出來變為行組成新的矩陣 18 return Matrix([[e for e in self.col_vector(i)] 19 for i in range(self.col_num())]) 20 21 #返回兩個矩陣的加法結果 22 def __add__(self, another): 23 # 校驗兩個矩陣的形狀為一致(行數、列數一致) 24 assert self.shape() == another.shape(), \ 25 "Error in adding. Shape of matrix must be same." 26 # 根據矩陣的加法公式:兩個矩陣對應的每一行的每一個元素相加,獲得新的矩陣(遍歷兩個矩陣對應的每一個行每個元素進行相加<第二步>,外部再遍歷該矩陣的行數(循環的次數)<第一步>) 27 return Matrix([[a+b for a,b in zip(self.row_vector(i),another.row_vector(i))] 28 for i in range(self.row_num())]) 29 30 # 返回兩個矩陣的減法結果 31 def __sub__(self, another): 32 assert self.shape() == another.shape(), \ 33 "Error in subtracting. Shape of matrix must be same." 34 return Matrix([[a - b for a, b in zip(self.row_vector(i), another.row_vector(i))] 35 for i in range(self.row_num())]) 36 37 #返回兩個矩陣的乘法結果(矩陣乘以矩陣) 38 def dot(self,another): 39 if isinstance(another,Vector):#判斷是否為向量:矩陣與向量的乘法 40 assert self.col_num() == len(another),\ 41 "Error in Matrix_Vector Multiplication." #矩陣與向量的乘法錯誤 42 return Vector([self.row_vector(i).dot(another) for i in range(self.row_num())]) 43 if isinstance(another,Matrix):#判斷是否為矩陣:矩陣與矩陣的乘法 44 assert self.col_num() == another.row_num(),\ 45 "Error in Matrix-Matrix Multiplication." #矩陣與矩陣的乘法錯誤 46 # 將矩陣的每一行與另一矩陣的每一列進行向量間的點乘 47 return Matrix([[self.row_vector(i).dot(another.col_vector(j)) for j in range(another.col_num())] 48 for i in range(self.row_num())]) 49 50 #返回矩陣的數量乘結果(矩陣乘以數字):self * k 51 def __mul__(self, k): 52 #通過遍歷每一行的每個元素e后分別乘以k<第一步>,外部再遍歷該矩陣的行數(循環的次數)<第二步> 53 return Matrix([[e * k for e in self.row_vector(i)] 54 for i in range(self.row_num())]) 55 56 # 返回矩陣的數量乘結果(數字乘以矩陣):k * self 57 def __rmul__(self, k): 58 return self * k 59 60 #返回數量除法的結果矩陣:self / k 61 def __truediv__(self, k): 62 return (1 / k) * self 63 64 #返回矩陣取正的結果 65 def __pos__(self): 66 return 1 * self 67 68 #返回矩陣取負的結果 69 def __neg__(self): 70 return -1 * self 71 72 #返回矩陣的第index個行向量 73 def row_vector(self,index): 74 return Vector(self._values[index]) 75 76 # 返回矩陣的第index個列向量 77 def col_vector(self, index): 78 return Vector([row[index] for row in self._values]) 79 80 #返回矩陣pos位置的元素(根據元素的位置取元素值) :參數2:元組 81 def __getitem__(self, pos): 82 r,c = pos 83 return self._values[r][c] 84 85 #返回矩陣的元素個數 86 def size(self): 87 r,c = self.shape() 88 return r*c 89 90 #返回矩陣行數 91 def row_num(self): 92 return self.shape()[0] 93 94 __len__ = row_num 95 96 #返回矩陣列數 97 def col_num(self): 98 return self.shape()[1] 99 100 #返回矩陣形狀:(行數,列數) 101 def shape(self): 102 return len(self._values),len(self._values[0]) 103 104 #矩陣展示 105 def __repr__(self): 106 return "Matrix({})".format(self._values) 107 108 __str__ = __repr__
2.在main_matrix.py編寫代碼: 返回矩陣的轉置矩陣
1 from playLA.Matrix import Matrix 2 from playLA.Vector import Vector 3 4 if __name__ == "__main__": 5 #生成一個矩陣 6 matrix = Matrix([[1,2],[3,4]]) 7 print(matrix) 8 #矩陣的行數和列數(返回矩陣形狀:(行數,列數)) 9 print("matrix.shape = {}".format(matrix.shape())) 10 #返回矩陣的元素個數 11 print("matrix.size = {}".format(matrix.size())) 12 print("len(matrix) = {}".format(len(matrix))) 13 #根據元素的位置取元素值 14 print("matrix[0][0] = {}".format(matrix[0,0])) 15 # 返回矩陣的第index個行向量 16 print("matrix.row_vector = {}".format(matrix.row_vector(0))) 17 # 返回矩陣的第index個列向量 18 print("matrix.col_vector = {}".format(matrix.col_vector(0))) 19 20 # 返回兩個矩陣的加法結果 21 matrix2 = Matrix([[5,6],[7,8]]) 22 print("add:{}".format(matrix + matrix2)) 23 # 返回兩個矩陣的減法結果 24 print("subtract:{}".format(matrix - matrix2)) 25 #返回矩陣的數量乘結果(矩陣乘以數字):self * k 26 print("scalar-mul:{}".format(matrix * 2)) 27 # 返回矩陣的數量乘結果(數字乘以矩陣):k * self 28 print("scalar-mul:{}".format(2 * matrix)) 29 # 零矩陣類方法:返回一個2行3列的零矩陣 30 print("zero_2_3:{}".format(Matrix.zero(2,3))) 31 32 # 返回兩個矩陣的乘法結果(矩陣乘以矩陣) 33 T = Matrix([[1.5,0],[0,2]]) 34 p = Vector([5,3]) 35 print("T.dot(p) = {}".format(T.dot(p))) 36 P = Matrix([[0,4,5],[0,0,3]]) 37 print("T.dot(P) = {}".format(T.dot(P))) 38 print("matrix.dot(matrix2) = {}".format(matrix.dot(matrix2))) 39 print("matrix2.dot(matrix) = {}".format(matrix2.dot(matrix))) 40 41 # 返回矩陣的轉置矩陣 42 print("P.T = {}".format(P.T()))
3.運行main_matrix.py結果為:
1 /Users/liuxiaoming/PycharmProjects/LinearAlgebra/venv/bin/python /Applications/PyCharm.app/Contents/plugins/python/helpers/pydev/pydevconsole.py --mode=client --port=50098 2 import sys; print('Python %s on %s' % (sys.version, sys.platform)) 3 sys.path.extend(['/Users/liuxiaoming/PycharmProjects/LinearAlgebra']) 4 PyDev console: starting. 5 Python 3.8.2 (v3.8.2:7b3ab5921f, Feb 24 2020, 17:52:18) 6 [Clang 6.0 (clang-600.0.57)] on darwin 7 >>> runfile('/Users/liuxiaoming/PycharmProjects/LinearAlgebra/main_matrix.py', wdir='/Users/liuxiaoming/PycharmProjects/LinearAlgebra') 8 Matrix([[1, 2], [3, 4]]) 9 matrix.shape = (2, 2) 10 matrix.size = 4 11 len(matrix) = 2 12 matrix[0][0] = 1 13 matrix.row_vector = (1, 2) 14 matrix.col_vector = (1, 3) 15 add:Matrix([[6, 8], [10, 12]]) 16 subtract:Matrix([[-4, -4], [-4, -4]]) 17 scalar-mul:Matrix([[2, 4], [6, 8]]) 18 scalar-mul:Matrix([[2, 4], [6, 8]]) 19 zero_2_3:Matrix([[0, 0, 0], [0, 0, 0]]) 20 T.dot(p) = (7.5, 6) 21 T.dot(P) = Matrix([[0.0, 6.0, 7.5], [0, 0, 6]]) 22 matrix.dot(matrix2) = Matrix([[19, 22], [43, 50]]) 23 matrix2.dot(matrix) = Matrix([[23, 34], [31, 46]]) 24 P.T = Matrix([[0, 0], [4, 0], [5, 3]])
3. (矩陣再numpy中的應用)文件 main_numpy_vector.py 編寫代碼
1 import numpy as np 2 3 if __name__ == "__main__": 4 5 #矩陣的創建 6 A =np.array([[1,2],[3,4]]) 7 print(A) 8 9 #矩陣的屬性 10 print(A.shape)#矩陣的形狀(行數、列數) 11 print(A.T)#矩陣的轉置 12 13 #獲取矩陣的元素(從零開始計算) 14 print(A[1,1])#矩陣的某個元素 15 print(A[0])#矩陣的行向量 等價於 A([0,:]) 16 print(A[:,0])#矩陣的列向量(兩個索引:索引1:冒號取全部行,索引2:某一列) 17 18 #矩陣的基本運算 19 B = np.array([[5,6],[7,8]]) 20 print("A + B = {}".format(A + B)) 21 print("A - b = {}".format(A - B)) 22 print("10 * A = {}".format(10 * A)) 23 print("A * 10 = {}".format(A * 10)) 24 print(A * B)#矩陣中每個元素對應元素相乘而已(不是線性代數中的矩陣相乘) 25 print("A.dot(B) = {}".format(A.dot(B)))#矩陣之間相乘 26 27 p = np.array([10,100]) 28 print("A + p = {}".format(A + p))#此處處理為廣播機制處理,也就是每一行對應的每個元素進行相加,但不是線性代數中的矩陣加法 29 print("A + 1 = {}".format(A + 1))#此處處理為廣播機制處理,也就是每一行對應的每個元素進行相加,但不是線性代數中的矩陣加法 30 31 print("A.dot(p) = {}".format(A.dot(p)))#矩陣乘以向量
4. 運行文件 main_numpy_vector.py 結果為:
1 /Users/liuxiaoming/PycharmProjects/LinearAlgebra/venv/bin/python /Users/liuxiaoming/PycharmProjects/LinearAlgebra/playLA/main_numpy_matrix.py 2 [[1 2] 3 [3 4]] 4 (2, 2) 5 [[1 3] 6 [2 4]] 7 4 8 [1 2] 9 [1 3] 10 A + B = [[ 6 8] 11 [10 12]] 12 A - b = [[-4 -4] 13 [-4 -4]] 14 10 * A = [[10 20] 15 [30 40]] 16 A * 10 = [[10 20] 17 [30 40]] 18 [[ 5 12] 19 [21 32]] 20 A.dot(B) = [[19 22] 21 [43 50]] 22 A + p = [[ 11 102] 23 [ 13 104]] 24 A + 1 = [[2 3] 25 [4 5]] 26 A.dot(p) = [210 430] 27 28 Process finished with exit code 0
