使用Matlab对三维矩阵的左右翻转进行矢量化

时间:2013-10-15 23:35:03

标签: matlab matrix vectorization flip

我有一个电影的3D矩阵(比如大小为J * K * L的矩阵M)。我想每帧左右翻转。使用fliplr(M)不起作用,因为M必须是二维矩阵。我知道我可以使用以下的for循环:

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

这是一种“矢量化”方式吗?

更一般地说,在这种情况下,采用Matlab的矩阵操作(flipudrepmat等)是一种“矢量化”方式吗?

2 个答案:

答案 0 :(得分:4)

我认为你在寻找

M = flipdim(M, 2);

这将沿您指定的维度翻转N维矩阵作为第二个参数。因此,flipud可以替换为

M = flipdim(M, 1);

不确定repmat问题的位置,但我经常发现我可以使用bsxfun代替repmat。查一查。

答案 1 :(得分:4)

或者,您可以使用简单的索引:

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

这比flipdim更快,资源更少,我认为也更清洁。

但是,对于某些人来说,end关键字的这种特殊用法令人困惑,所以如果你是其中一个人,flipdim会很好:)