5

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

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

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

更一般地说,在这种情况下,是否是一种“矢量化”方式来执行 Matlab 的任何矩阵操作(flipudrepmat等)?

4

2 回答 2

4

我想你正在寻找

M = flipdim(M, 2);

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

M = flipdim(M, 1);

不知道你要问这个repmat问题,但我经常发现我可以使用bsxfun而不是repmat. 查一下。

于 2013-10-15T23:53:21.263 回答
4

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

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

这比 快得多,资源密集度也少得多flipdim,而且我认为也更干净。

但是,对于某些人来说,关键字的这种特殊用法end令人困惑,因此,如果您是这些人中的一员,flipdim就可以了 :)

于 2013-10-16T06:34:34.840 回答