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



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

 for ii=1:size(M,3)
     M(:,:,ii)=fliplr( M(:,:,ii) )
 end
这是一种

"矢量化"的方法吗?

更一般地说,在这种情况下,执行任何Matlab矩阵操作(flipudrepmat等)的"矢量化"方法吗?

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

>> 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。查一查。

最新更新