【问题标题】:Matlab create a matrix with valuesMatlab用值创建一个矩阵
【发布时间】:2015-08-05 12:32:15
【问题描述】:

我在 matlab 中编写了一个函数,它使用循环生成矩阵。我想知道是否可以在没有循环的情况下生成相同的结果。 X 可以是 1 x 50、2 x 50、3 x 50 等...每行每列的值范围从 1 到 50 递增。

例如

  • 1 x 1 = 1,
  • 2 x 1 = 1,
  • 3 x 1 = 1,
  • 1 x 2 = 2,
  • 2 x 2 = 2,
  • 3 x 2 = 2,
  • .....................
  • 1 x 50 = 50,
  • 2 x 50 = 50,
  • 3 x 50 = 50,

我的功能:

function [i] = m(x)
    [a, b] = size(x);
    i = zeros(a, b);
    for c = 1 : a
        i(c, :) = (1:size(x,2));
    end
end

谢谢。

【问题讨论】:

    标签: arrays performance matlab matrix


    【解决方案1】:

    试试这个:

    N = 3;
    M = 50;
    x = repmat((1:N)',M,1);
    y = reshape(repmat((1:M)',1,N)',N*M,1);
    %z = x.*y
    z = strcat(num2str(x),'x',num2str(y),'=',num2str(x.*y))
    

    这将在您的问题中给出相同的格式。

    【讨论】:

    • 感谢您分享您的解决方案。
    【解决方案2】:

    使用repmat:

    output = repmat(1:size(x,2), size(x,1), 1);
    

    一些替代品是

    output = ones(size(x,1),1)*(1:size(x,2));
    

    output = cumsum(ones(size(x)),2);
    

    【讨论】:

    • 非常感谢。我不知道repmat。我一直在尝试重塑。
    【解决方案3】:

    repmat(Luis's answer) 的替代品是bsxfun

    out = bsxfun(@times,ones(size(x,1),1),1:size(x,2))
    

    【讨论】:

    • 感谢您提供替代方法!
    猜你喜欢
    • 2018-07-12
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 2014-07-22
    • 2012-03-16
    相关资源
    最近更新 更多