2013-10-15 9 views
5

私は映画の3Dマトリックスを持っています(例えば、サイズJ * K * Lの行列M)。私は各フレームを右にずらしたい。 fliplr(M)を使用すると動作しません。Mは2-Dマトリックスでなければなりません。私は以下のforループを使うことができることを知っています:Matlabを使用して3D行列の左右反転のベクトル化

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

"ベクトル化された"方法ですか?

この場合、Matlabの行列操作(flipudrepmatなど)のいずれかを実行するための「ベクトル化」方法がありますか?

答えて

4

また、あなたは、単純なインデックスを使用することができます。これは、多くのより速く、より少ないリソースを消費flipdimより

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

を、と私はあまりにも多くのクリーナーと思います。

はしかし、一部の人のために、endキーワードのこの特定の使用が混乱しているので、あなたがその一人なら、flipdimだけで罰金:)

+0

ありがとう、これは完全な意味があり、私はそれがさらに好き!私がよりよく覚えておく必要がある特別なMATLAB関数は少なくなりました。 –

+0

これは完全に有効な代替手段です。個人的には、私はそれが何をしているのか正確に教えてくれるので、私は「フリップディスク」を好む。上のコードを見ると、私は考える必要があります...これは書くのが簡単かもしれません(関数名を覚える必要はありません)、もう一つは読みやすくなります。あなたが両方の答えを得て、あなたが選ぶことができます。 – Floris

4

私はあなたが

M = flipdim(M, 2); 

を探している。これは、あなたが2番目のパラメータとして指定した次元に沿ってN次元のマトリックスを反転しますと思います。あなたはrepmat質問を行っているところしたがって、flipud

M = flipdim(M, 1); 

わからないと置き換えることができますが、私は頻繁に私がbsxfun代わりのrepmat使用できます。調べる。

+1

ああを行います、あなたは9秒でそれを得ました。あなたのために+1して、それが必要ではありません。 ;) – chappjc

関連する問題