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