我有一个电影的3D矩阵(比如一个大小为J*K*L的矩阵M
)。我想每帧都向左翻转。使用fliplr(M)
不起作用M
因为必须是二维矩阵。我知道我可以使用以下 for 循环:
for ii=1:size(M,3)
M(:,:,ii)=fliplr( M(:,:,ii) )
end
这是一种"矢量化"的方法吗?
更一般地说,在这种情况下,执行任何Matlab矩阵操作(flipud
,repmat
等)的"矢量化"方法吗?
或者,您可以使用简单的索引:
>> M = rand(3,4,5);
>> M(:, end:-1:1, :);
这比flipdim
更快,资源密集度更低,而且我认为也更干净。
但是,对于某些人来说,end
关键字的这种特殊用法令人困惑,因此如果您是这些人中的一员,flipdim
就可以:)
我想你正在寻找
M = flipdim(M, 2);
这将沿指定为第二个参数的维度翻转 N 维矩阵。因此,flipud
可以替换为
M = flipdim(M, 1);
不确定你对repmat
问题要去哪里,但我经常发现我可以使用bsxfun
而不是repmat
。查一查。