2015-04-01 1 views
0

J'essaie de convertir certains éléments d'une matrice en zéros en fonction d'un tableau logique.Tableaux logiques en tant qu'indices de tableaux pour convertir des éléments à zéro dans MATLAB

Supposons que nous ayons une matrice 5 x 5 au hasard:

b = 

0.0344 0.1869 0.7547 0.1190 0.2238 
0.4387 0.4898 0.2760 0.4984 0.7513 
0.3816 0.4456 0.6797 0.9597 0.2551 
0.7655 0.6463 0.6551 0.3404 0.5060 
0.7952 0.7094 0.1626 0.5853 0.6991 

Et je un tableau de zéros et ceux avec la même dimension:

a = 

0  1  1  0  0 
1  0  1  1  0 
1  1  0  1  1 
0  1  1  0  1 
0  0  1  1  0 

Faire a(logical(b)) me donne les éléments que je suis à la recherche , mais sous une forme vectorielle:

ans = 

0.4387 
0.3816 
0.1869 
0.4456 
0.6463 
0.7547 
0.2760 
0.6551 
0.1626 
0.4984 
0.9597 
0.5853 
0.2551 
0.5060 

Comment puis-je obtenir le matrice suivante à la place?

0   0.1869 0.7547 0   0 
0.4387 0   0.2760 0.4984 0.7513 
0.3816 0.4456 0   0.9597 0.2551 
0   0.6463 0.6551 0   0.5060 
0   0   0.1626 0.5853 0 

Répondre

2

Je viens de réaliser qu'il y avait une réponse dans une autre question. Le paramètre b(~logical(a)) = 0 fonctionne.

(Juste garder ce ici parce que la question est formulée un peu différemment.)

+3

Vous pouvez faire 'b (a == 0) = 0;' être encore plus court. Je dirais que cela indique plus expressément ce que vous voulez faire plutôt que d'utiliser '~ logical (a)'. – rayryeng

+2

Vous pouvez également faire une multiplication par éléments '. *'. – knedlsepp