Sposób, w jaki to robisz, jesteś tylko coraz indeks kolumna z 1
„s ponieważ używasz tylko Drugie wyjście find
.
[~, col] = find(a == 1)
% 1 1 2 4
Kiedy użyć tego jako indeksu do a
to będzie traktować je jako wskaźnik liniowego i zmienić tylko 1, 2, i 4. Wartości w a
do 0
. Indeksowanie liniowe jest wykonywane w column-major order, co daje wynik, który widzisz.
Aby zrobić to, co próbujesz zrobić, trzeba zarówno wyjść find
uzyskać indeksy wierszy i kolumn, a następnie użyć sub2ind
konwertować je do indeksu liniowego, które można następnie wykorzystać do indeksu w a
.
[row, col] = find(a == 1);
a(sub2ind(size(a), row, col)) = 0;
To dużo łatwiejsze do korzystania z pojedynczej wersji wyjściowej find
które po prostu zwraca indeks liniowego bezpośrednio i używać.
ind = find(a == 1);
a(ind) = 0;
Albo jeszcze lepiej, wystarczy użyć logicznej indeksowanie
a(a == 1) = 0;
Pytanie jest ciekawe, i dostaliśmy bardzo dobrą odpowiedź. Ale proponuję zmienić tytuł na coś takiego jak "Dziwne zachowanie find() _. Moja pierwsza myśl, kiedy zobaczyłem bieżący tytuł (_find() nie działa) był "Oczywiście, że tak". –