【问题标题】:Building a matrix by merging the same row vector multiple times通过多次合并相同的行向量来构建矩阵
【发布时间】:2011-10-16 21:23:00
【问题描述】:

是否有一个matlab函数可以让我做以下操作?

x = [1 2 2 3];

然后基于x我要构建矩阵m = [1 2 2 3; 1 2 2 3; 1 2 2 3; 1 2 2 3]

【问题讨论】:

    标签: matlab matrix rows repeat tiling


    【解决方案1】:

    您正在寻找REPMAT 函数:

    x = [1 2 2 3];
    m = repmat(x,4,1);
    

    您也可以使用索引来重复行:

    m = x(ones(4,1),:);
    

    甚至是外积:

    m = ones(4,1)*x;
    

    并且还使用 BSXFUN:

    m = bsxfun(@times, x, ones(4,1))
    

    【讨论】:

    • 如果我想构建m = [1 2 2 3; 2 4 4 6; 3 6 6 9]
    • 使用 BSXFUN 解决方案:m = bsxfun(@times, x, (1:3)')
    • 如果我没记错的话,使用索引比使用 repmat 更快。但可读性也差很多。
    【解决方案2】:

    您可以尝试使用vertcat,如下所示:

    x = [1 2 2 3];
    m = vertcat(x,x,x,x);
    

    甚至简单地说:

    x = [1 2 2 3];
    m = [x;x;x;x];
    

    编辑:

    对于 x 的倍数,您可以这样做:

    x = [1 2 2 3];
    m = [x;2*x;3*x];  %  [1 2 2 3; 2 4 4 6; 3 6 6 9]
    

    EDIT2:

    对于 m 中任意数量的 x...

    n = 3; % number of repetitions...
    x = [1 2 2 3];
    m = [];
    for i=1:n
        m = [m;x];
    end
    

    【讨论】:

    • 问题是我想传递一个带有倍数的参数。我想在 for 循环中执行此操作,并且连接原始向量的次数未确定。
    • 啊,你没有在你的问题中提到这一点......(我已经编辑了我的答案)
    猜你喜欢
    • 1970-01-01
    • 2012-09-04
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    相关资源
    最近更新 更多