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

Ric*_*ard 5 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|
Run Code Online (Sandbox Code Playgroud)

Amr*_*mro 9

本着奖金答案的精神,这里有一些我自己的:

A = (1:5)'

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

    B = A(:, ones(5,1))
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用矩阵外产品:

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

    B = bsxfun(@plus, A, zeros(1,5))
    %# or
    B = bsxfun(@times, A, ones(1,5))
    
    Run Code Online (Sandbox Code Playgroud)

  • @merv:您可以在http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_prog/f8-784135.html#br8fs0d-4 @woodchips上阅读有关这些"提高性能的技术"的更多信息:第一个你给出的例子与gnovice给出的例子相同.第二种不是一般的替代品,只是这种特殊的"A"的特殊情况. (3认同)

gno*_*ice 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
Run Code Online (Sandbox Code Playgroud)

编辑:奖励答案!;)

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

B = kron(A,ones(1,5));
Run Code Online (Sandbox Code Playgroud)

对于小向量和矩阵,KRON可能稍微快一点,但对于较大的矩阵来说它要慢得多.