Matlab:按顺序重复每一列n次

时间:2013-04-28 19:23:37

标签: matlab matrix repeat

我几乎是初学者,所以很可能以简单的方式做我想做的事。 我有一个矩阵121x62,但我需要将它扩展到121x1488所以每列必须重复24次。例如,转换它:

   2.2668       2.2667       2.2667       2.2666       2.2666       2.2666       
   2.2582       2.2582       2.2582       2.2582       2.2581       2.2581       
    2.283        2.283        2.283       2.2829       2.2829       2.2829       
   2.2881       2.2881       2.2881       2.2881       2.2881        2.288        
    2.268        2.268       2.2679       2.2679       2.2678       2.2678       
   2.2742       2.2742       2.2741       2.2741       2.2741        2.274    

进入这个:

2.2668     2.2668     2.2668  and so on to 24th     2.2667     2.2667  and again to 24x
2.2582     2.2582     2.2582 ...
每栏都

我尝试使用这些值创建一个向量,然后使用vec2mat进行转换,确定我有121x1488矩阵但是按行重复:

2.2668   2.2668   2.2668  2.2668  2.2668  2.2668 ...    2.2582   2.2582  2.2582  2.2582 ...

如何按列进行操作?

3 个答案:

答案 0 :(得分:22)

假设您有简化输入,并希望按顺序n次扩展列:

A   = [1 4
       2 5
       3 6];

szA = size(A); 
n = 3;

有几种方法可以做到:

  • 复制,然后重塑:

    reshape(repmat(A,n,1),szA(1),n*szA(2))
    
  • Kronecker产品:

    kron(A,ones(1,n))
    
  • 使用FEX: expand()

    expand(A,[1 n])
    
  • 自R2015a以来,repelem()

    repelem(A,1,n)
    

所有产生相同的结果:

ans =
     1     1     1     4     4     4
     2     2     2     5     5     5
     3     3     3     6     6     6

答案 1 :(得分:1)

只是为了完整起见。如果要沿行复制,也可以使用rectpulse()。

A = [1,2,3;...
     4,5,6];

n = 3;

rectpulse(A, n);

给你

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

答案 2 :(得分:0)

你走了:

function [result] = repcolumn(A, n)
    %n - how many times each column from A should be repeated

    [rows columns] = size(A);
    result = repmat(A(:,1),1,n);

    for i = 2:columns
        result = [result,repmat(A(:,i),1,n)];
    end
end

必须有一种更简单的方法,但它能完成这项工作。