Pythonで(Numpyとか使わずに)行列積の計算をしてみる
Python習いたての大学生がやりたがりそうなこと、第4位「行列計算」。一応、自力で書いてみました。
行列A,Bを二次元リストとして、その行列積を計算します。行列積が定義できないときにはその旨を表示、定数×行列 の計算もできるようにしています。
きっと色々がばがばなので....改善したら適宜編集します。rangeの書き方これじゃなくていいですね
A,Bが行列じゃないときに警告文を出すようにしたいのですが、どうすりゃいいかなあ。
ご指摘等ありましたら優しく@aagoon545まで。
A=[[1 for i in range(3)] for j in range(2)] B=[[1 for k in range(4)] for l in range(3)] line_A = len(A) raw_A = len(A[0]) line_B = len(B) raw_B = len(B[0]) print("A is (" + str(line_A) + "," + str(raw_A) +") matrix." ) print("B is (" + str(line_B) + "," + str(raw_B) +") matrix." ) #そもそもAが行列でないとき #そもそもBが行列でないとき #Aが1*1行列の時 if line_A == 1 and raw_A == 1 : AB = [] for i in range(0 , line_B ): line_AB_i = [] for j in range(0 , raw_B ): AB_ij = 0 AB_ij = A[0][0]*B[i][j] #print(AB_ij) line_AB_i.append(AB_ij) AB.append(line_AB_i) print(AB) #演算が定義できないとき elif raw_A != line_B: print("This calculation is not defined!!") #普通に計算できるとき else: AB = [] for i in range(0 , line_A ): line_AB_i = [] for j in range(0 , raw_B ): AB_ij = 0 for k in range(0 , raw_A ): AB_ij = A[i][k]*B[k][j] + AB_ij #print(AB_ij) line_AB_i.append(AB_ij) AB.append(line_AB_i) print(AB)