Bonjour,
Je cherche à Vectoriser :
j'ai essayé ça :Code:
1
2
3
4 for j = 1 : size(ale,1) inter(mat(:,ale(j))+1) = not(inter(mat(:,ale(j))+1)); end
mais ca marche pas.Code:
1
2 inter(mat(:,ale(:))+1) = not(inter(mat(:,ale(:))+1));
Des idées merci.
Version imprimable
Bonjour,
Je cherche à Vectoriser :
j'ai essayé ça :Code:
1
2
3
4 for j = 1 : size(ale,1) inter(mat(:,ale(j))+1) = not(inter(mat(:,ale(j))+1)); end
mais ca marche pas.Code:
1
2 inter(mat(:,ale(:))+1) = not(inter(mat(:,ale(:))+1));
Des idées merci.
Merci mais ca ne marche pas,
Le problème c'est que le résultat actuelle dépend du précédent. j'avais déjà bien un vecteur colonne.
exemple :
ale = [1 2]'
mat(1) = 001
mat(2) = 011
sortie :
en une ligne =>
inter = 011
avec ma boucle
inter = 010
Pour faire simple je dois inverser (0 ou 1) chaque cellule de matrice(inter) aux coordonnées mat(ale)
je m'explique surement mal :/
Ce n'est pas très clair pour moi,
En fait, si mat est sensée indexer ta matrice inter, elle ne devrait pas contenir des zéros à moins que ce soit des valeurs logiques. Et si tel est le cas la somme mat(:,ale)+1 conduit à des réels (et de facto, tu n'as que les indices 1 et 2). Sinon, cela entraîne tout de même un décalage.
Peux-tu donner un exemple complet avec avec ta matrice inter?
@++
Une exemple sera plus claire oui :)
par exemple :Code:
1
2
3
4
5
6
7
8
9
10 mat = matrice de 541x300 avec des nombres allant de 1 à 1000 inter =zeros(1000,1); ale = [1 2]'; for j = 1 : size(ale,1) inter(mat(:,ale(j))+1) = not(inter(mat(:,ale(j))+1)); end
lire les deux 1er ligne car ale = [1 2]';
si on lit dans la première ligne de mat =[ 1 5 7]
je veux inverser l’état de inter(1) inter(5) et inter(7)
dans la seconde ligne de si mat = [1 6 8]
je veux inverser l’état de inter(1) inter(6) et inter(8)
on obtiendra donc
inter = [0 0 0 0 1 1 1 1 ]et que des zero
inter(1) = 0 car on a inversé deux fois sont état
Comme ceci ?
Code:
1
2
3
4
5
6
7 mat = [1 5 7 ; 1 6 8] % nombre d'inversions par indice n = histc(mat(:), 1:8) % test de parité du nombre d'inversions inter = bitget(n, 1)
Merci ca marche,
Mais je suis déçue, je faisais ça pour gagner du temps, mais c'est beaucoup plus lent