Je veux répéter les éléments d'un vecteur, mais en considérant des blocs d'éléments (sans utiliser de boucles). Par exemple, si l'on considère un bloc de taille 2, j'ai un vecteur comme celui-ci a = [1:6]
et je veux que la sortie ressemble à ceci: out = [1 2 1 2 3 4 3 4 5 6 5 6]
.Matlab: dupliquer des blocs d'éléments dans un vecteur
0
A
Répondre
2
Vous pouvez reshape
votre entrée, puis le répéter au besoin à l'aide repmat
blksize = 2;
tmp = repmat(reshape(a, blksize, 1, []), 1, blksize, 1);
output = tmp(:).';
Explication
D'abord, nous voulons remodeler votre matrice dans une matrice blksize x 1 x (numel(a)/blksize)
.
A = reshape(a, blksize, 1, []);
Alors nous voulons répéter A
blksize
fois le long de la seconde dimension pour créer le nombre nécessaire de répétitions.
B = repmat(A, 1, blksize, 1);
Nous aplatirez la chose dans un tableau et grâce à la commande de colonne principale, nous obtenons la sortie désirée
output = B(:).'
en option One-Liner
Si vous voulez vraiment une ligne que vous pouvez utiliser à nouveau reshape
plutôt que (:).'
output = reshape(repmat(reshape(a, blksize, 1, []), 1, blksize, 1), 1, []);
Alternative
Vous pouvez également utiliser repelem
de Matlab pour accomplir la répétition
result = reshape(repelem(reshape(a, blksize, 1, []), 1, blksize, 1), 1, [])
Pour un bloc d'une taille 3 ce qui est le résultat attendu? – rahnema1
'out = [1 2 3 1 2 3 4 5 6 4 5 6]'. – f380cedric
Et pour un bloc de taille 5? – rahnema1