QUESTIONある特定の次元に沿って私は1つの特定の次元に沿って二つの配列を乗算するエレガントな方法を探しています
を行列を掛けます。
類似QUESTION
あり、公式Matlabのフォーラムでsimilar questionはすでにあるが、スレッドが(2004)時代遅れです。
例
M1
[6x4x4]行列とM2
[6x1]行列、Iは[行列Mを得るために、M1の第3の次元に沿ってM2
と(要素ごと)M1
を乗算したいです6x4x4]
相当する:
M1 = rand(6,4,4);
M2 = rand(6,1);
for ii = 1:size(M1,2)
for jj = 1:size(M1,3)
M(:,ii,jj) = M1(:,ii,jj).*M2;
end
end
VISUAL例
あなたがそれを行うためのクールな方法を知っていますか?
あなたのコードは、エラーを与える:示されたサイズの「行列の次元が同意しなければなりません」。また、希望の結果のサイズは? 'M = bsxfun(@times、M1、permute(M2、[2 3 1]));'; 'を試してみてください。' M 'に 'M1'と同じサイズを与えます。 –
コードが機能するためには、すべてのシングルトンの次元を取り除き、対応する列ベクトルを得るために 'M1(ii、jj、:)'に '' squeeze 'を実行します。 – rayryeng
@LuisMendo 'M1(ii、jj、:)'を実行すると、 '1 x 1 x n'ベクトルが得られ、' M2'を要素として掛け合わせると、互換性のない次元になります。ここに「圧搾」が必要です。 – rayryeng