我有一个电影的3D矩阵(比如大小为J * K * L的矩阵M
)。我想每帧左右翻转。使用fliplr(M)
不起作用,因为M
必须是二维矩阵。我知道我可以使用以下的for循环:
for ii=1:size(M,3)
M(:,:,ii)=fliplr( M(:,:,ii) )
end
这是一种“矢量化”方式吗?
更一般地说,在这种情况下,采用Matlab的矩阵操作(flipud
,repmat
等)是一种“矢量化”方式吗?
答案 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
会很好:)