データが以下だとします。
python
1>>> import numpy as np
2>>>
3>>> N = 2
4>>> L = 3
5>>>
6>>> m1 = [np.arange(i,i+4).reshape((N,N)) for i in range(L)]
7>>> m2 = [np.arange(i,i+4).reshape((N,N)) for i in range(L+1,2*L+1)]
8>>> print(m1)
9[array([[0, 1],
10 [2, 3]]), array([[1, 2],
11 [3, 4]]), array([[2, 3],
12 [4, 5]])]
13>>> print(m2)
14[array([[4, 5],
15 [6, 7]]), array([[5, 6],
16 [7, 8]]), array([[6, 7],
17 [8, 9]])]
これを処理するのが以下です。
python
1>>> M1 = np.zeros(N*N*L).reshape(N*L,N)
2>>> M2 = np.zeros(N*N*L).reshape(N,N*L)
3>>>
4>>> for i in range(L):
5... M1[i*N:i*N+N,:] = m1[i]
6... M2[:,i*N:i*N+N] = m2[i]
7...
8>>> M3 = np.dot(M1,M2)
9>>> m3 = [np.split(M, 3) for M in np.split(M3,3, axis=1)]
10>>> m4 = sum([m3[i][j] for i in range(L) for j in range(L)])
11>>> print(m4)
12[[171. 198.]
13 [387. 450.]]
conatinateを使うと遅いので、空のndarrayを作って代入しています。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。