empty - zeros matlab



Comportement étrange de find() (1)

La façon dont vous le faites, vous obtenez seulement l'index de la colonne des 1 puisque vous n'utilisez que la deuxième sortie de find .

[~, col] = find(a == 1)
%   1   1   2   4

Lorsque vous l'utilisez comme un index dans a il va les traiter comme un index linéaire et ne changer que les 1ère, 2ème et 4ème valeurs dans a dans 0 . L'indexation linéaire est effectuée dans l'ordre des colonnes , ce qui entraîne la sortie que vous voyez.

Pour faire ce que vous essayez de faire, vous avez besoin des deux sorties de find pour obtenir les index de lignes et de colonnes, puis utilisez sub2ind pour les convertir en un index linéaire que vous pouvez ensuite utiliser pour indexer en a .

[row, col] = find(a == 1);
a(sub2ind(size(a), row, col)) = 0;

Il est beaucoup plus facile d'utiliser la version à sortie unique de find qui renvoie simplement l'index linéaire directement et l'utilise.

ind = find(a == 1);
a(ind) = 0;

Ou mieux encore, utilisez simplement l'indexation logique

a(a == 1) = 0;

J'ai cette matrice:

a = [1 2 2 1; 1 1 2 2]

%   1     2     2     1 
%   1     1     2     2

Je veux trouver tous les 1 et les mettre à zéro.

[~, a_i] = find(a == 1);
a(a_i) = 0

%   0     2     2     1 
%   0     0     2     2

Pourquoi y a-t-il encore un 1 dans la première rangée?





matrix