2015-03-30 1 views
1

je peux avoir quelque chose commeopération logique dans l'expression de la plage de vecteur dans Matlab

A=1:10; 

A(1:2 && 5:6)=0; 

qui signifie que je veux mettre à zéro des gammes spécifiques dans mon expression d'index de vecteur dans une ligne

Est-ce possible?

Et si je voulais mettre à zéro tout le reste comme

A(~[1:2]) = 0 

Quelle est la manière de NON logique au sein de l'indexation des vecteurs?

Merci

+0

Et si je voulais mettre à zéro tout le reste comme A (~ [1: 2]) = 0? Quelle est la façon logique de NOT dans l'indexation vectorielle? – user3374479

+0

J'ai édité ma réponse pour aussi zéro le complément des indices que vous avez fournis. – eigenchris

+0

merci, fonctionne très bien, mais n'y a-t-il pas quelque chose avec des expressions logiques? Ne devrait-il pas être plus rapide de cette façon? – user3374479

Répondre

1

Les éléments suivants devraient fonctionner:

idx = [1:2,5:6]; 
A(idx) = 0 

Si vous voulez zéro le complément du vecteur d'indices:

idx = [1:2,5:6]; 
A(~ismembc(1:length(A),idx)) = 0 

ismembc est plus rapide, version légère de ismember qui suppose que le tableau est trié et non-clairsemé avec aucun NaN éléments. (Le crédit passe à this question.)

1

Faites simplement A([1:2 5:6]). C'est-à-dire, créez simplement un vecteur des indices que vous voulez mettre à zéro.