salut;
j'ai un vecteur a=[3 2 1];
je veux le transformer par boucle for en
new_a= [3 0 0 2 0 0 1 0 0];
comment je peux le faire?
salut;
j'ai un vecteur a=[3 2 1];
je veux le transformer par boucle for en
new_a= [3 0 0 2 0 0 1 0 0];
comment je peux le faire?
Bonjour,
As-tu commencé à coder quelque chose?
Montre-nous ce que tu as déjà codé, même si c'est faux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 clc; clear all; a=[3 2 1] w=[0 0 0]; for i=1:length(a) pos(i)=2*i; end pos tf=false(1,numel(a)+numel(w)); r=double(tf); tf(pos)=true; r(tf)=w; r(~tf)=a; r
Pour vouloir passer par une boucle for, tu fais beaucoup en dehors...
Pour commencer, on peut remarquer que
Donc tu peux initialiser un vecteur de zéros comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part numel(new_a) = 3*numel(a)
Il te suffit ensuite de placer les valeurs de a. Et pour cela l'opérateur colon : peut t'aider:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 N = 3*numel(a); new_a = zeros(1,N);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 for i = 1:3:N i end
Merci à vous.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 clc; clear all; a=[3 2 1] w=[0 0 0 0 0 0]; pos=0; for i=1:3:3*length(a) i pos=[pos i] end pos=pos(1,2:length(pos)); pos tf=false(1,numel(a)+numel(w)) r=double(tf) tf(pos)=true r(tf)=a; r(~tf)=w; r
Beaucoup de choses inutiles et simplifications à faire:
- L'emploi de w est inutile: les zéros sont déjà présents lors de l'initialisation.
Peut aussi s'écrire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 pos=0; for i=1:3:3*length(a) pos=[pos i]; end pos=pos(1,2:length(pos));
et se simplifier en
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 pos=[]; for i=1:3:3*length(a) pos=[pos i]; end
Code : Sélectionner tout - Visualiser dans une fenêtre à part pos = 1:3:3*length(a); Ici tu essais d'utiliser l'indexage logique alors que tu pars des indices. Tu passes par beaucoup d'étapes inutiles:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 tf=false(1,numel(a)+numel(w)) r=double(tf) tf(pos)=true r(tf)=a; r(~tf)=w;
suffit.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 r = zeros(1,3*length(a)); r(pos)=a
Partager