m が形状が (2, 1, 2) の配列、T が形状が (1, 2, 2) の配列、結果 C が形状 (2, 2) の配列としたとき、行いたい計算は以下なので、
これは numpy.einsum("ija, jka->ik", m, T)
で計算できます。
numpyにおける tensordotとeinsumの関係 - Qiita
python
1m1 = [1, 2]
2m2 = [2, 2]
3T1 = [3, 1]
4T2 = [4, 1]
5
6m = np.array([[m1], [m2]]) # (2, 1, 2)
7T = np.array([[T1, T2]]) # (1, 2, 2)
8
9print(m.shape)
10print(T.shape)
11
12# [[m1・T1, m1・T2],
13# [m2・T1, m2・T2]]
14C = np.einsum("ija, jka->ik", m, T)
15print(C)
追記
こういうことでしょうか?
numpy は数値計算ライブラリなので、数値計算でないなら、numpy は使えないと思います。
python
1m1 = [1, 2]
2m2 = [2, 2]
3T1 = [3, 1]
4T2 = [4, 1]
5
6m = [[m1],
7 [m2]] # (2, 1)
8T = [[T1, T2]] # (1, 2)
9
10m_row, m_col = len(m), len(m[0])
11T_row, T_col = len(T), len(T[0])
12
13C = [[[] for j in range(T_col)] for i in range(m_row)]
14
15for i in range(m_row):
16 for j in range(T_col):
17 for k in range(m_col):
18 C[i][j].append([m[i][k], T[k][j]])
19
20print(C)
21# [ [ [[[1, 2], [3, 1]]], [[[1, 2], [4, 1]]] ],
22# [ [[[2, 2], [3, 1]]], [[[2, 2], [4, 1]]] ] ]
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/05/22 03:05
2020/05/22 03:18
退会済みユーザー
2020/05/22 03:23
2020/05/22 03:33