【问题标题】:Matlab merge matrices to cellMatlab将矩阵合并到单元格
【发布时间】:2016-04-14 14:06:37
【问题描述】:

在 Matlab 中,我得到了三个矩阵(由向量组成)x, y, z,每个矩阵的大小为 3xn

我想将它们合并到一个包含 n 条目的单元格中,每个条目都是一个 3x3 矩阵:

for i=1:n
    C{i} = [x(:,i), y(:,i), z(:,i)];
end

有没有比使用这个 for 循环更快的方法,因为这需要很长时间?

我已经找到了像 mat2cellcellfun 这样的函数,但它们都不能真正满足我的需求,不是吗?

【问题讨论】:

    标签: matlab matrix cell-array


    【解决方案1】:

    除非您调用的代码需要它,否则请改用 3D 数组。它的开销要少得多。

    C = zeros(3, 3, n);
    for ii = 1:n
        C(:, :, ii) = [x(:,ii) y(:,ii) z(:,ii)];
    end
    

    在这种形式中,您可以使用 reshape 对其进行矢量化:

    C = reshape([x; y; z], [3 3 n]);
    

    【讨论】:

    • 谢谢彼得,您的代码可以正常工作。当我要求将其存储在单元格中时,我接受了林肯的回答。对于不需要将其存储在单元格中并且可以使用 3d 数组的其他所有人,这也适用!
    【解决方案2】:

    试试这个:

    t = reshape([x; y; z], [3 3*n]); %//reshape your vectors into a matrix that could be use nicely with mat2cell
    C = mat2cell(t, 3, 3*ones(1,n));
    

    【讨论】:

      【解决方案3】:

      您可以预先分配内存以提高性能:

      C = cell(n, 1);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-12
        • 1970-01-01
        • 2017-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-10
        相关资源
        最近更新 更多