【问题标题】:vectorization of flip left-right of a 3D matrix using Matlab使用 Matlab 对 3D 矩阵的左右翻转进行矢量化
【发布时间】:2013-10-15 23:35:03
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: matlab matrix vectorization flip


    【解决方案1】:

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

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

    这比flipdim 快得多,占用的资源也少得多,而且我认为也更干净。

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

    【讨论】:

    • 谢谢,这很有意义,我更喜欢它!我需要记住的特殊 matlab 函数越少越好。
    • 这是一个完全有效的替代方案——我个人更喜欢flipdim,因为它可以准确地告诉我它在做什么。看到上面的代码,我不得不想……这个可能更容易写(不必记住函数名),另一个更容易阅读。 SO 最酷的地方在于,您可以得到两个答案,并且可以选择。
    【解决方案2】:

    我想你正在寻找

    M = flipdim(M, 2);
    

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

    M = flipdim(M, 1);
    

    不确定repmat 问题的去向,但我经常发现我可以使用bsxfun 而不是repmat。查一下。

    【讨论】:

    • 啊,你提前 9 秒搞定了。为您 +1,而不是您需要它。 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 2016-10-27
    • 1970-01-01
    相关资源
    最近更新 更多