\(8 \times 8\) 行列 \(A\) と、\(8 \times 8\) 行列 \(B\) に対して、行列積 \(C = A^T \times B\) (shape:\(8 \times 8\)) を計算してください。\(A,B,C\) のレイアウトは以下のとおりです。
A: ((2:4, 4:1), (4_PE:1, 2_W:1))
B: ((2:4, 4:1), (4_PE:1, 2_W:1))
C: ((2:4, 4:1), (4_PE:1, 2_W:1))
\(A, B, C\) の値はこちらです。
A:
[[ 0, 1, 2, 3, 4, 5, 6, 7],
[ 8, 9, 10, 11, 12, 13, 14, 15],
[ 16, 17, 18, 19, 20, 21, 22, 23],
[ 24, 25, 26, 27, 28, 29, 30, 31],
[ 32, 33, 34, 35, 36, 37, 38, 39],
[ 40, 41, 42, 43, 44, 45, 46, 47],
[ 48, 49, 50, 51, 52, 53, 54, 55],
[ 56, 57, 58, 59, 60, 61, 62, 63]]
B:
[[100,101,102,103,104,105,106,107],
[108,109,110,111,112,113,114,115],
[116,117,118,119,120,121,122,123],
[124,125,126,127,128,129,130,131],
[132,133,134,135,136,137,138,139],
[140,141,142,143,144,145,146,147],
[148,149,150,151,152,153,154,155],
[156,157,158,159,160,161,162,163]]
C:
import numpy as np
A = np.array([[ 0, 1, 2, 3, 4, 5, 6, 7],
[ 8, 9, 10, 11, 12, 13, 14, 15],
[ 16, 17, 18, 19, 20, 21, 22, 23],
[ 24, 25, 26, 27, 28, 29, 30, 31],
[ 32, 33, 34, 35, 36, 37, 38, 39],
[ 40, 41, 42, 43, 44, 45, 46, 47],
[ 48, 49, 50, 51, 52, 53, 54, 55],
[ 56, 57, 58, 59, 60, 61, 62, 63]])
B = np.array([[100,101,102,103,104,105,106,107],
[108,109,110,111,112,113,114,115],
[116,117,118,119,120,121,122,123],
[124,125,126,127,128,129,130,131],
[132,133,134,135,136,137,138,139],
[140,141,142,143,144,145,146,147],
[148,149,150,151,152,153,154,155],
[156,157,158,159,160,161,162,163]])
A.T @ B
[[31360,31584,31808,32032,32256,32480,32704,32928],
[32384,32616,32848,33080,33312,33544,33776,34008],
[33408,33648,33888,34128,34368,34608,34848,35088],
[34432,34680,34928,35176,35424,35672,35920,36168],
[35456,35712,35968,36224,36480,36736,36992,37248],
[36480,36744,37008,37272,37536,37800,38064,38328],
[37504,37776,38048,38320,38592,38864,39136,39408],
[38528,38808,39088,39368,39648,39928,40208,40488]]
振り返ると、\(A \times B^T\) のときは転置は必要ありませんでした。\(A \times B\) のときは、\(B\) を転置してから行列演算しました。