在MATLAB中从一维数组生成二维数组

时间:2010-02-05 17:52:43

标签: arrays matlab matrix

有没有人知道是否有办法从1D数组生成2D数组,其中2D中的行是通过重复1D数组中的相应元素生成的。

即:

1D array      2D array

  |1|       |1 1 1 1 1|
  |2|       |2 2 2 2 2|
  |3|  ->   |3 3 3 3 3|
  |4|       |4 4 4 4 4|
  |5|       |5 5 5 5 5|

4 个答案:

答案 0 :(得分:9)

本着奖金答案的精神,以下是我自己的一些:

A = (1:5)'

  1. 使用索引[比repmat更快]:

    B = A(:, ones(5,1))
    
  2. 使用矩阵外部产品:

    B = A*ones(1,5)
    
  3. 使用bsxfun()[不是最好的方法]

    B = bsxfun(@plus, A, zeros(1,5))
    %# or
    B = bsxfun(@times, A, ones(1,5))
    

答案 1 :(得分:8)

您可以使用REPMAT功能执行此操作:

>> A = (1:5).'

A =

     1
     2
     3
     4
     5

>> B = repmat(A,1,5)

B =

     1     1     1     1     1
     2     2     2     2     2
     3     3     3     3     3
     4     4     4     4     4
     5     5     5     5     5

编辑:奖励答案! ;)

对于您的示例,REPMAT是最直接的函数。但是,要注意的另一个很酷的功能是KRON,您也可以通过以下方式将其用作解决方案:

B = kron(A,ones(1,5));

对于小向量和矩阵KRON可能稍微更快,但对于更大的矩阵来说它会慢一些。

答案 2 :(得分:1)

repmat(a,[1 n]),但您还应该看看meshgrid

答案 3 :(得分:0)

您可以尝试以下方式:

a = [1 2 3 4 5]'
l = size(a)
for i=2:5
    a(1:5, i) = a(1:5)

循环只是将列追加到最后。