1

ベクトルvと行列Mがあります。vの各要素にMを掛けてから、結果のすべての行列を合計したいと思います。

for i=1:length(v)
    lala(:,:,i) = v(i).*M;
end
sum(lala, 3)

forループなしでこれを行うことは可能ですか?

4

2 に答える 2

3

DanilAsotskyの答えは正しいと思います。彼はここで操作の線形性を利用しています。クロネッカーテンソル積を使用して、この線形性プロパティに依存しない別のソリューションを提供したいので、次以外の操作でも機能しますsum

kvM = kron(v,M);
result = sum(reshape(kvM,[size(M) numel(v)]),3)

私の現地時間では遅すぎます。これが機能する理由の詳細を説明する気はありません。matlabヘルプとウィキペディアから理解できない場合は、以下にコメントしてください。説明します。

于 2012-10-12T06:07:09.690 に答える
2

iに依存しない単一の行列Mがありますか?この場合、sum(v(i)* M)= sum(v(i))*Mです。

たとえば、コードに対して期待される結果が得られます。

v_sum = sum(v);
lala_sum = v_sum * M;
于 2012-10-12T05:51:35.340 に答える