suptitle matlab
Extraño comportamiento de find() (1)
La forma en que lo hace, solo está obteniendo el índice de columna del 1
ya que solo está utilizando el segundo resultado de find
.
[~, col] = find(a == 1)
% 1 1 2 4
Cuando utiliza esto como un índice en a
va a tratar estos como un índice lineal y cambia solo los valores de 1ra, 2da y 4ta en a
en 0
. La indexación lineal se realiza en orden de columna mayor, por lo que se obtiene el resultado que está viendo.
Para hacer lo que intenta hacer, necesita ambos resultados de find
para obtener los índices de fila y columna y luego use sub2ind
para convertirlos a un índice lineal que luego puede usar para indexar en a
.
[row, col] = find(a == 1);
a(sub2ind(size(a), row, col)) = 0;
Es mucho más fácil usar la versión de salida única de find
que simplemente devuelve directamente el índice lineal y lo usa.
ind = find(a == 1);
a(ind) = 0;
O mejor aún, solo usa indexación lógica
a(a == 1) = 0;
Tengo esta matriz:
a = [1 2 2 1; 1 1 2 2]
% 1 2 2 1
% 1 1 2 2
Quiero encontrar todos los 1 y ponerlos a cero.
[~, a_i] = find(a == 1);
a(a_i) = 0
% 0 2 2 1
% 0 0 2 2
¿Por qué todavía hay un 1 en la primera fila?