7
votes

MATLAB: répétez chaque colonne séquentiellement n fois

Je suis à peu près débutant, il est probablement possible de faire ce que je veux de manière simple. J'ai une matrice 121x62 mais j'ai besoin de l'étendre à 121x1488, chaque colonne doit donc être répétée 24 fois. Par exemple, transformez ceci: xxx

dans ceci: xxx

avec chaque colonne.

J'ai essayé Pour créer un vecteur avec ces valeurs, puis transformer avec Vec2Mat et ok j'ai une matrice 121x1488 mais répétée par des lignes: xxx

comment le faire par colonnes? < / p>


2 commentaires

Pourriez-vous coller le code avec la transformation Vec2Mat?


Gpt2 = repmat (zhd_gpt2 (:), 1,24); X = Vec2mat (GPT2 1488);


3 Réponses :


0
votes

Vous allez ici:

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


1 commentaires

Je vous remercie. Il est assez propre et ça marche



22
votes

Supposons que vous ayez cette entrée em> simplifiée em> et que vous souhaitez développer des colonnes séquentiellement n code> temps: xxx pré>

Il y a peu de façons de faire que: p>

  • réplique, puis remodelez: p>

    ans =
         1     1     1     4     4     4
         2     2     2     5     5     5
         3     3     3     6     6     6
    
  • Kronecker Produit: P>

    repelem(A,1,n)
    
  • en utilisant FEX: Développer () Code> : p>

    expand(A,[1 n])
    
  • Depuis R2015A, Repelem () Code> : p>

    kron(A,ones(1,n))
    


4 commentaires

+1 pour kron solution


Merci pour trois solutions. Y a-t-il une préférence concernant la performance? En fait, je le fais dans une énorme boucle qui rend la performance très importante.


@Alirezamirien réplique, Remoder devrait être le plus rapide.


Accepter. Kron est une solution assez élégante



1
votes

juste pour des raisons d'exhaustivité. Si vous souhaitez dupliquer le long des lignes, vous pouvez également utiliser rectpulse ().

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


0 commentaires