3つの行列に配列を掛ける必要がある数値計算を高速化しようとしています。問題の構造は以下である:Numpy Tensordotを使用する行列配列の乗算を変更する
- (N、10)の形状として配列
- 第1の行列は、アレイの動的寸法に沿って一定であり(10、10の形状を有しています)
- 他の二つの行列は、アレイの第一の次元に沿って変化し、(N、10、10を有する)(N、形状)を持つ配列であるべきである
- 計算の結果を形作る
forループを使用してソリューションを実装しました。私はnumpyの機能を使用しようとしているので、私はより良いパフォーマンスを持っていると思います。
:私は以下の通りであるforループ Iはnumpy.tensordotを使用して試みたが、アレイを有するダイナミック行列を乗算するときに私の代わりに(N、10)の(N 10、N)の形状を得ますres = np.zeros(temp_rho.shape, dtype=np.complex128)
for i in range(temp_rho.shape[0]):
res[i] = np.dot(self.constMatrix, temp_rho[i])
res[i] += np.dot(self.dinMat1[i], temp_rho[i])
res[i] += np.dot(self.dinMat2[i], np.conj(temp_rho[i]))
#temp_rho.shape = (N, 10)
#res.shape = (N, 10)
#self.constMatrix.shape = (10, 10)
#self.dinMat1.shape = (N, 10, 10)
#self.dinMat2.shape = (N, 10, 10)
このコードをnumpyのドットプロダクトに実装するには、正しいディメンションを返す必要がありますか?