1

行列の乗算と要素ごとの加算を組み合わせてベクトル化する方法を探しています。

行列関数 M_{ij}(x) とベクトル関数 v_j(x) があるとします。{i,j} は行列インデックス、x は位置変数です。要素ごとの行列乗算を実行し、u(x) = M(x).v(x) を見つけたいと考えています。簡単な例は次のとおりです。

imax = 2; jmax = 3; xmax = 10;

M=rand(imax,jmax,xmax);
v=rand(jmax,xmax);
u=zeros(imax,xmax);

for i=1:imax
    for j=1:jmax
        u(i,:) = u(i,:) + squeeze(M(i,j,:))'.*v(j,:);
    end
end

この操作を高速化するベクトル化された方法はありますか? 私の問題では、imax,jmax が 5 未満で、xmax が大きいと仮定します。

4

1 に答える 1

1

試す

 u=squeeze(sum(bsxfun(@times,permute(M, [2 3 1]), v)))';
于 2012-08-02T17:16:25.083 に答える