Matlab创建一个带有值的矩阵

时间:2015-05-23 15:25:34

标签: arrays performance matlab matrix

我在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

感谢。

3 个答案:

答案 0 :(得分:3)

试试这个:

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))

这将在您的问题中提供相同的格式。

答案 1 :(得分: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);

答案 2 :(得分:2)

repmatLuis's answer)的一个替代值是bsxfun

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