7

我几乎是初学者,所以可能以简单的方式做我想做的事。我有一个 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 ...

如何按列做?

4

3 回答 3

23

假设您有这个简化的输入,并且您希望按顺序扩展列n

A   = [1 4
       2 5
       3 6];

szA = size(A); 
n = 3;

有几种方法可以做到这一点:

  • 复制,然后重塑:

    reshape(repmat(A,n,1),szA(1),n*szA(2))
    
  • 克罗内克产品:

    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
于 2013-04-28T23:34:18.660 回答
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
于 2017-08-21T16:09:07.397 回答
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

必须有一种更简单的方法,但它可以完成工作。

于 2013-04-28T19:51:21.420 回答