私は3次元の配列Uと2次元の行列Aを持っています。私は以下のように乗算をしたいと思います。コードをどのようにベクトル化できますか?もちろん、ループは遅すぎます。配列の乗算のためのベクトル化
for j=1:N
for k=1:N
UU(:,j,k)=A*U(:,j,k);
end
end
私は3次元の配列Uと2次元の行列Aを持っています。私は以下のように乗算をしたいと思います。コードをどのようにベクトル化できますか?もちろん、ループは遅すぎます。配列の乗算のためのベクトル化
for j=1:N
for k=1:N
UU(:,j,k)=A*U(:,j,k);
end
end
あなたの行列のサイズに応じて、あなたが見つけるかもしれないという両方のループは、多くのメモリ、および列の上にちょうどループを除去することが十分であること、
for k = 1:N
UU(:,:,k) = A*U(:,:,k);
end
リシェープU
をチューズ排除2D
に変換して行列乗算を実行すると、A
の最後の軸であるU
の最初の軸/寸法が2次元配列に縮小されます。最後に、最終結果を得るために3D
に改造します。
[m1,n1] = size(A);
[~,m2,n2] = size(U);
out = reshape(A*reshape(U,[n1,m2*n2]),[m1,m2,n2])