Matlab:创建一个矩阵,其行由一个linspace或类似的模式组成

时间:2014-09-20 17:01:33

标签: matlab matrix

有人知道一种快速的方法来生成一个由每行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循环的情况下产生这个的快速技巧吗?

5 个答案:

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

您可以考虑以下解决方案:

  1. 使用基本矩阵索引(取自here

    b=a([1:size(a,1)]' * ones(1,NumToReplicate), :)  %row-wise replication
    b=a(:, ones(NumToReplicate, 1))  %column-wise replication
    
  2. 使用bsxfun

     bsxfun(@times,a,(ones(1,NumToReplicate))')  %row-wise replication
     bsxfun(@times,a',(ones(1,NumToReplicate)))  %column-wise replication
    
  3. 欢迎您使用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),:);