2013-05-04 3 views
1

J'ai un vecteur qui me dit où dans la matrice je dois changer certains bit et matrice avec des données. Par exemple:Octave/Matlab: changer la valeur à certaine position dans matix

a = [2 
    0 
    4] 

data = [ 1 0 1 0; 
     0 0 1 0 
     1 1 1 1] 

un me dit, je dois changer (flip de 1 à 0) les valeurs folowing:

  • 2e colonne de 1er rang
  • colonne 4ième dans la 3e rangée
  • dans la 2ème rangée il n'y a pas de changement !!!

le résultat serait

data2 = [ 1 1 1 0; 
      0 0 1 0 
      1 1 1 0] 

Comment puis-je faire avec seulement des opérations vectorielles? Je ne veux pas utiliser pour les boucles parce qu'elles sont trop lentes.

Répondre

2

est ici une façon de le faire:

data2=data; 
    ind=sub2ind(size(data),find(a),a(a>0)); 
    data2(ind)=~data(ind) 
+0

Bonjour, merci pour la réponse. J'ai essayé votre code, mais quelque chose semble toujours manquer. Si j'utilise ce code sur les données d'exemple, je reçois ce qui suit: data2 = [1 1 1 1; 0 0 1 0; 1 0 1 0], donc il retourne quelques bits supplémentaires. – andy57

+0

oui, je vois pourquoi ça se passe, j'ai utilisé l'indexation linéaire sans être trop prudent. voir mon édition pour le correctif. – bla

+0

fonctionne très bien maintenant, merci! – andy57

Questions connexes