我在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
感谢。
答案 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)
repmat
(Luis's answer)的一个替代值是bsxfun
out = bsxfun(@times,ones(size(x,1),1),1:size(x,2))