2012-08-08 12 views

Répondre

3

Ceci peut être résolu assez facilement en utilisant l'indexation logique:

x = [0 0 0 1 1 0 5 0 7 0] 
y = [0 2 0 1 1 2 5 2 7 0] 

idx = ~(x==0 & y==0); 

x2 = x(idx) 
y2 = y(idx) 

Le tableau idx auront un 0x et y sont tous deux nuls et une 1 autrement. Lorsque vous indexez en utilisant un tel tableau, il retournera uniquement les valeurs où l'index est vrai (1).

éditer: Si vous voulez l'itérer, il suffit de mettre une boucle for autour. Ce n'est pas difficile, mais avec une description vague, je ne peux que donner un code vague (ou un code très compliqué avec des tableaux de cellules, ce qui sera trop compliqué pour ce dont vous avez vraiment besoin).

for i = ... 
    x = % dependent on i 
    y = % dependent on i 

    idx = ~(x==0 & y==0); 

    x2 = x(idx) 
    y2 = y(idx) 
end 
+0

et pardonnez-moi, mais je ne suis pas encore bon dans matalb, si je veux itérer it avoir fois x et i fois y, comment puis-je le faire avec pour boucle? – berndh

2

Vous pouvez écrire:

idx = any([x;y]); 

ou mieux encore

idx = x|y; 

vous appliquer l'indexation logique pour sélectionner les éléments:

x2 = x(idx) 
y2 = y(idx) 
0

Une alternative compacte pour positifs en utilisant l'indexation logique g, plus seulement et en place modification:

idx = ~(x+y); 
x(idx)=[]; 
y(idx)=[]; 

EDIT: Pour les entiers signés, où les éléments correspondants dans les deux tableaux pourraient ajouter jusqu'à zéro, vous pouvez éviter les == ou ~= comparaisons par

idx = ~(abs(x)+abs(y)) 
+0

si elles sont positives (ou de même signe d'ailleurs), elles ne peuvent pas correspondre à zéro. vrai, cependant, que pour une solution générique, et pour éviter les comparaisons '~ =' ou '==', vous pouvez faire 'idx = ~ (abs (x) + abs (y))' – gevang

Questions connexes