2017-02-10 1 views
0

J'ai la matrice de cellules:Comment remplacer tous les éléments d'un tableau qui satisfont une condition?

im = {'A+','B-','B+','A+'; 'A-','B-', NaN, 'A+'}; 

Je veux boucle à travers chaque ligne pour voir ceux qui ont à la fois des sommes de « A 'et » B égal à 2. Ensuite, je remplacer ces lignes avec NaN. J'ai le code:

for ii = 1: size(im,1) 
    if (sum(strcmp('A+', im), 2) + sum(strcmp('A-', im), 2)) == 2 & (sum(strcmp('B+', im), 2) + sum(strcmp('B-', im), 2))== 2 

    im{ii, 1} = NaN; 
    im{ii, 2} = NaN; 
    im{ii, 3} = NaN; 
    im{ii, 4} = NaN;  
    end 
end 

Quand je supprimer la 2e rangée de im, je reçois les ans: im = {NaN, NaN, NaN, NaN}. Cependant, quand j'inclus la 2ème rangée, im reste tel qu'il est à l'origine. S'il vous plaît, ce qui pourrait être mauvais avec mon code? Deuxièmement, y a-t-il une meilleure façon de remplacer les éléments?

Toute aide ou suggestion s'il vous plaît ??? Merci beaucoup.

+0

Puisque vous ne dites pas Matlab quoi faire au cas où la somme n'est pas 2 pour A et B, il reste inchangé, comme vous l'observez. Vous pouvez ajouter une instruction 'elseif' dans votre boucle pour prendre soin de ce cas. –

+1

Pour corriger votre code, modifiez les conditions comme ceci:' if sum (strcmp ('A +', im (ii, :))) + .. ..' –

Répondre

0

Votre code ne fonctionne pas car dans l'instruction if, vous vérifiez la somme dans la cellule entière, pas seulement dans une seule ligne. Vous devez utiliser quelque chose comme ceci:

if (sum(strcmp('A+', im(ii,:)), 2) + sum(strcmp('A-', im(ii,:)), 2)) == 2 & (sum(strcmp('B+', im(ii,:)), 2) + sum(strcmp('B-', im(ii,:)), 2))== 2 

Additionnellement, vous pouvez modifier vos quatre lignes suivantes pour un seul comme celui-ci:

im(ii,:) = {NaN} 
+0

Un grand merci à tout le monde. Bien apprécié ... – User1772