ヒント_3_8

練習問題_3_8(forの3重化 行列の積)

この問題のポイントは ABの要素となる  0x0 + 1×10 + 2×20 + 3×30 をどう処理するかです。このAの0行目とBの0列目の内積を計算するには複数の方法があるかと思います。以下そのうちの2つの方法を示します。

x = 0
for k in range(len(A[0])):
    x += A[0][k] * B[k][0]
x

140

x = []
for k in range(len(A[0])):
    x.append(A[0][k] * B[k][0])
sum(x)

140

  1. 戻り値となるABの初期値[]を設定します。
  2. Aの行数分の要素が必要なので最初に for i in range(len(A)) でfor文を作成します。
  3. 次にAの要素となる行を表すリスト rowの初期値[]を設定します。
  4. rowの長さはBの列数分なので for j in range(len(B[0])) でfor文を作成します。
  5. 4番のforの処理文として上記のどちらかを記載します。その際 A[0][k] * B[k][0]ではなく、Aの i行、Bのj列を表す A[i][k] * B[k][j] とします。
  6. 5番のループ処理後に rowに xまたは sum(x)をappendします。(上のコードを使用時は x 下のコード使用時は sum(x))
  7. 4番のループ処理後に ABにrowをappendします。
  8. 2番のループ処理後に ABをreturnします。

解答例はこちら

タイトルとURLをコピーしました