5

映画の 3D マトリックスがあります (たとえば、Mサイズ J*K*L のマトリックス)。フレームごとに左右反転したい。は 2 次元行列でなければならないため、使用fliplr(M)は機能しません。M次の for ループを使用できることはわかっています。

 for ii=1:size(M,3)
     M(:,:,ii)=fliplr( M(:,:,ii) )
 end

それを行うための「ベクトル化された」方法はありますか?

より一般的に言えば、この場合、Matlab の行列操作 ( 、 など) を行うための「ベクトル化された」方法はありますflipudrepmat?

4

2 に答える 2

4

私はあなたが探していると思います

M = flipdim(M, 2);

これは、2 番目のパラメーターとして指定した次元に沿って N 次元の行列を反転します。したがって、 は次のflipudように置き換えることができます

M = flipdim(M, 1);

repmat質問でどこに向かっているのかわかりませんが、代わりに を使用できることがよくありbsxfunますrepmat。調べる。

于 2013-10-15T23:53:21.263 に答える
4

または、単純なインデックスを使用できます。

>> M = rand(3,4,5);
>> M(:, end:-1:1, :);

これは よりもはるかに高速で、リソースの消費も少なく、よりflipdimクリーンでもあると思います。

ただし、一部の人にとっては、endキーワードのこの特定の使用法は混乱を招くため、あなたがそのような人の 1 人であれば、flipdimうまくいくでしょう :)

于 2013-10-16T06:34:34.840 に答える