多次元配列のブロードキャストについて質問です。
二次元配列が多次元に並んだ2つのテンソルがあって、そのテンソルの中の行列同士の要素積の最大値を取得し、並べるという操作をしたいと思っています。
for loopで行うとわかりやすいですが計算時間が遅い、ブロードキャストできるようにrepeatで次元を増やすと早くはなるが、メモリを大量に使うためそこがネックに。
もっと賢い方法はありますか?
Python
1import numpy as np
23X = np.random.randint(0,9,(20,15,13,10,10))4Y = np.random.randint(0,9,(9,10,10))56# X.shape:(A,B,C,D,E)7# Y.shape:(F,D,E)89# for loop10Z = np.zeros((X.shape[0],X.shape[1],X.shape[2],Y.shape[0]))1112for a inrange(X.shape[0]):13for b inrange(X.shape[1]):14for c inrange(X.shape[2]):15for f inrange(Y.shape[0]):16 Z[a,b,c,f]= np.max(X[a,b,c,:,:]*Y[f,:,:])171819# Z.shape:(20, 15, 13, 9)2021# ブロードキャスト22X_rep = np.repeat(X[:,:,:,np.newaxis,:,:],1,axis=0)23Y_rep = np.repeat(Y[np.newaxis,np.newaxis,np.newaxis,:,:],1,axis=0)\
2425Z_rep = np.max(X_rep*Y_rep,axis=(-2,-1))2627# Z_rep.shape:(20, 15, 13, 9)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/18 12:09 編集
2020/03/19 06:06 編集
2020/03/20 05:06