有人知道一种快速的方法来生成一个由每行linspace组成的矩阵吗?例如,我在这个矩阵中寻找的那种模式是:
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
...
1 2 3 4 5 6 7 8 9 10
任何人都知道在没有使用for循环的情况下产生这个的快速技巧吗?
答案 0 :(得分:2)
我只是想出来了,所以为了防止其他人对此感到困扰,我们可以通过以下方式实现这一模式:
a=linspace(1,10,10);
b=ones(3,1)*a;
这将给出:
>> a = 1 2 3 4 5 6 7 8 9 10
>> b = 1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
答案 1 :(得分:1)
插入此命令:transpose(ndgrid(1:10,1:n));
,其中n
是结果中所需的行数。
答案 2 :(得分:1)
您需要使用repmat。
示例:
>> B = repmat(1:10,[3 1])
B =
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
你可以在那里改变3的值。你可以相应地改变它。
答案 3 :(得分:1)
您可以考虑以下解决方案:
使用基本矩阵索引(取自here)
b=a([1:size(a,1)]' * ones(1,NumToReplicate), :) %row-wise replication
b=a(:, ones(NumToReplicate, 1)) %column-wise replication
使用bsxfun
:
bsxfun(@times,a,(ones(1,NumToReplicate))') %row-wise replication
bsxfun(@times,a',(ones(1,NumToReplicate))) %column-wise replication
欢迎您使用repmat
对以上两种解决方案进行基准测试。
答案 4 :(得分:1)
我可以推荐的另一种快捷方式类似于repmat
,但您首先指定a = 1:10;
的基本数组。执行此操作后,在索引时在第一维中指定一系列1
,其中应生成具有多个行的相同向量的矩阵,其中每行包含基数组{{1} }。就这样:
a
结果:
%// number of times to replicate
n = 4;
a = 1:10;
a = a(ones(1,n),:);