2013-05-02 2 views
3

Basicly Je tableau comme ceci:rembourrage/bourrage zéro dans Matlab

[1 2 3 4 5 6] 

Je veux avoir tableau comme ceci:

[1 0 2 0 3 0 4 0 5 0 6] 

Il est donc L-1 zéros dans tableau où L est le nombre de toutes les valeurs dans le tableau avant le bourrage de zéro.

Quelqu'un a-t-il une idée pour la solution dans Matlab?

Répondre

7

Vous pouvez essayer ceci:

a = [1 2 3 4 5 6]; 

b = zeros(1, 2 * length(a) - 1); 
b(1:2:end) = a; 

Il en résulte

b = 

    1  0  2  0  3  0  4  0  5  0  6 

Une version plus courte a été suggérée par Dan dans les commentaires:

b(1:2:2 * length(a) - 1) = a; 
+3

ou juste 'b (1: 2: 2 * longueur (a) - 1) = a' et laissez Matlab remplir les zéros pour vous – Dan

+0

@Dan: Belle suggestion. Va l'ajouter à la réponse, si cela vous convient? –

+0

Notez que ceci peut donner des résultats indésirables si 'b 'existe déjà. –

0

Peut-être pas le plus solution élégante/efficace, mais ce qui suit devrait fonctionner:

x = 1:6; 
y = zeros(1,2*length(x)-1); 
for k=1:length(x) 
    y(2*k-1)=x(k); 
end 

Arnaud

+0

Juste vu la réponse de H.Muster, c'est mieux (ne nécessite pas de boucle for). – am304

0

Une autre façon de le faire est:

  a=1:6; 
     b=zeros(1,2*length(a)-1); 
     j=1; 
     for i=1:2:length(b) 
      b(i)=a(j); 
      j=j+1; 
     end 
+2

Ce n'est pas la syntaxe Matlab - ressemble beaucoup plus à C ... – Dan

+0

juste parce que vous avez une fonction intégrée pour quelque chose ne signifie pas que vous ne pouviez pas créer de logique pour cela.besides cela fera la même chose que le fonction, c'est à vous de l'utiliser ou non. la chose tient toujours sa signification. –

+1

Mais cela ne fonctionnera pas du tout car il ne fonctionnera pas du tout dans Matlab. Si vous ne faites que décrire un algorithme, alors décrivez-le plutôt dans psuedocode, mais pourquoi publier du code à partir d'un langage complètement indépendant lorsque la question est étiquetée Matlab. Cela n'a rien à voir avec les fonctions intégrées (qu'il n'y en a pas pour cela). – Dan

1

Grâce reshape ing:

a = [1 2 3 4 5 6]; 
b = a; % make copy 
b(2,:) = 0; % add zeros 
b = b(:)'; %' 
b(end) = []; % discard last zero 
2

Si vous avez la boîte à outils de traitement du signal, vous pouvez utiliser la fonction upsample:

>> x = 1:5; 
>> upsample(x, 2) 
ans = 
    1  0  2  0  3  0  4  0  5  0 
+0

besoin de rejeter dernier '0' – Shai

+0

En supposant que vous avez' y = upsample (x, 2) 'vous pouvez jeter le dernier' 0' avec 'y (fin) = []' –

Questions connexes