2013-10-15 5 views
5

나는 영화의 3D 매트릭스를 가지고 있습니다 (크기가 J * K * L 인 매트릭스 M). 각 프레임에서 왼쪽으로 넘기고 싶습니다. M은 2-D 매트릭스 여야하므로 fliplr(M)을 사용하면 작동하지 않습니다. 다음의 for 루프를 사용할 수 있다는 것을 알고 있습니다 :Matlab을 사용하여 3D 매트릭스의 좌우 뒤집기의 벡터화

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

"벡터화 된"방법입니까?

더 일반적으로 말하자면이 경우 Matlab의 행렬 조작 (flipud, repmat 등)을 수행하는 "벡터화 된"방법이 무엇입니까?

답변

4

양자 택일로, 당신은 간단한 인덱싱 사용할 수 있습니다 :이 훨씬 빠르고 적은 리소스를 많이 flipdim보다

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

을, 나는 너무 많은 청소기 생각합니다. 당신이 그 사람들 중 하나라면, flipdim이 잘 할 수 있도록 :

+0

고마워요, 이것은 완전히 이해가되고 나는 그것을 더 좋아합니다! 적은 수의 특수 MATLAB 함수를 기억해야합니다. –

+0

그것은 완벽하게 유효한 대안입니다 - 개인적으로 나는 그것이 무엇을하는지 정확히 알려주므로 'flipdim'을 선호합니다. 위의 코드를 보면 생각할 필요가 있습니다.이 코드는 더 쉽게 작성할 수 있으며 (함수 이름을 기억할 필요가 없습니다), 다른 하나는 읽기 쉽습니다. 멋진 점은 두 가지 대답을 얻고 선택할 수 있다는 것입니다. – Floris

4

난 당신이

M = flipdim(M, 2); 

이 두 번째 매개 변수로 지정한 차원을 따라 N 차원 매트릭스를 화나게 찾고 있습니다 생각합니다. 당신이 repmat 질문 어디로 가고 따라서, flipud

M = flipdim(M, 1); 

확실하지로 대체 할 수 있지만, 나는 종종 내가 bsxfun 대신 repmat 사용할 수 있습니다 찾을 수 있습니다. 봐봐.

+1

그러나, 어떤 사람들은 들어, end 키워드의 특정 사용하면 9 초 그것을 가지고, 혼란. +1, 당신이 필요로하는 것이 아닙니다. ;) – chappjc

관련 문제