Arrays Matlab用值创建一个矩阵

Arrays Matlab用值创建一个矩阵,arrays,performance,matlab,matrix,Arrays,Performance,Matlab,Matrix,我在matlab中编写了一个函数,它使用循环生成一个矩阵。我想知道是否有可能在没有循环的情况下生成相同的结果。X可以是1 X 50、2 X 50、3 X 50等。。。每行每列的值增量范围为1到50 例如 1 x 1=1 2x1=1 3x1=1 1 x 2=2 2x2=2 3x2=2 1 x 50=50 2x50=50 3 x 50=50 我的功能: function [i] = m(x) [a, b] = size(x); i = zeros(a, b); for

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

例如

  • 1 x 1=1
  • 2x1=1
  • 3x1=1
  • 1 x 2=2
  • 2x2=2
  • 3x2=2
  • 1 x 50=50
  • 2x50=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
谢谢。

使用:

一些替代方案是

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

使用:

一些替代方案是

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

试试这个:

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))
这将为您的问题提供相同的格式。

尝试以下方法:

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

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

repmat()的另一个替代选项是


repmat
()的一种替代方法是


非常感谢你。我不知道雷普马特。我一直在尝试重塑。非常感谢。我不知道雷普马特。我一直在尝试重塑。谢谢你的替代方法!谢谢你的另一种方法!感谢您分享您的解决方案。感谢您分享您的解决方案。
out = bsxfun(@times,ones(size(x,1),1),1:size(x,2))