Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

find

Buscar índices y valores de elementos no nulos

Sintaxis

k = find(X)
k = find(X,n)
k = find(X,n,direction)
[row,col] = find(___)
[row,col,v] = find(___)

Descripción

ejemplo

k = find(X) devuelve un vector que contiene los índices lineales de cada elemento distinto de cero en el array X.

  • Si X es un vector, find devuelve un vector con la misma orientación que X.

  • Si X es un array multidimensional, find devuelve un vector de columna de los índices lineales del resultado.

  • Si X contiene elementos no nulos o está vacío, find devuelve un array vacío.

ejemplo

k = find(X,n) devuelve los primeros n índices correspondientes a los elementos no nulos de X.

ejemplo

k = find(X,n,direction), donde direction es 'last', encuentra los últimos n índices correspondientes a elementos no nulos en X. El valor predeterminado de direction es 'first', que encuentra los primeros n índices correspondientes a elementos no nulos.

ejemplo

[row,col] = find(___) devuelve los subíndices de fila y columna de cada elemento distinto de cero del array X mediante cualquiera de los argumentos de entrada de las sintaxis anteriores.

ejemplo

[row,col,v] = find(___) también devuelve el vector v, que contiene los elementos no nulos de X.

Ejemplos

contraer todo

Encuentre los elementos distintos de cero en una matriz de 3 por 3.

X = [1 0 2; 0 1 1; 0 0 4]
X = 3×3

     1     0     2
     0     1     1
     0     0     4

k = find(X)
k = 5×1

     1
     5
     7
     8
     9

Utilice el operador lógico not en X para localizar los ceros.

k2 = find(~X)
k2 = 4×1

     2
     3
     4
     6

Encuentre los primeros cinco elementos inferiores a 10 en una matriz cuadrada mágica de 4 por 4.

X = magic(4)
X = 4×4

    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1

k = find(X<10,5)
k = 5×1

     2
     3
     4
     5
     7

Vea los elementos correspondientes de X.

X(k)
ans = 5×1

     5
     9
     4
     2
     7

Para buscar un valor entero específico, utilice el operador ==. Por ejemplo, encuentre el elemento igual a 13 en un vector de 1 por 10 de enteros impares.

x = 1:2:20
x = 1×10

     1     3     5     7     9    11    13    15    17    19

k = find(x==13)
k = 7

Para encontrar un valor no entero, utilice un valor de tolerancia basado en los datos. De lo contrario, el resultado es a veces una matriz vacía debido al error de redondeo en punto flotante.

y = 0:0.1:1
y = 1×11

         0    0.1000    0.2000    0.3000    0.4000    0.5000    0.6000    0.7000    0.8000    0.9000    1.0000 ⋯

k = find(y==0.3)
k =

  1x0 empty double row vector
k = find(abs(y-0.3) < 0.001)
k = 4

Cree una matriz cuadrada mágica de 6 por 6 con todos los elementos de indexación impar igual a cero.

X = magic(6);
X(1:2:end) = 0
X = 6×6

     0     0     0     0     0     0
     3    32     7    21    23    25
     0     0     0     0     0     0
     8    28    33    17    10    15
     0     0     0     0     0     0
     4    36    29    13    18    11

Localice los últimos cuatro elementos distintos de cero.

k = find(X,4,'last')
k = 4×1

    30
    32
    34
    36

Busque los tres primeros elementos en una matriz de 4 por 4 que sean mayores que 0 y menores que 10. Especifique dos salidas para devolver los subíndices de fila y columna a los elementos.

X = [18 3 1 11; 8 10 11 3; 9 14 6 1; 4 3 15 21]
X = 4×4

    18     3     1    11
     8    10    11     3
     9    14     6     1
     4     3    15    21

[row,col] = find(X>0 & X<10,3)
row = 3×1

     2
     3
     4

col = 3×1

     1
     1
     1

La primera instancia es X(2,1), que es 8.

Encuentre los elementos distintos de cero en una matriz de 3 por 3. Especifique tres salidas para devolver los subíndices de fila, los subíndices de columna y los valores de elemento.

X = [3 2 0; -5 0 7; 0 0 1]
X = 3×3

     3     2     0
    -5     0     7
     0     0     1

[row,col,v] = find(X)
row = 5×1

     1
     2
     1
     2
     3

col = 5×1

     1
     1
     2
     3
     3

v = 5×1

     3
    -5
     2
     7
     1

Busque los elementos distintos de cero en un array de 4 por 2 por 3. Especifique dos salidas, row y col, para devolver los subíndices de fila y columna de los elementos que no son cero. Cuando la entrada es un array multidimensional (N > 2), find devuelve col como un índice lineal sobre las N-1 dimensiones finales de X.

X = zeros(4,2,3);
X([1 12 19 21]) = 1
X = 
X(:,:,1) =

     1     0
     0     0
     0     0
     0     0


X(:,:,2) =

     0     0
     0     0
     0     0
     1     0


X(:,:,3) =

     0     1
     0     0
     1     0
     0     0

[row,col] = find(X)
row = 4×1

     1
     4
     3
     1

col = 4×1

     1
     3
     5
     6

Argumentos de entrada

contraer todo

Array de entrada, especificado como escalar, vector, matriz o array multidimensional. Si X es un array vacío o tiene elementos que no sean cero, k es un array vacío.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char
Soporte de números complejos:

Número de valores distintos de cero que buscar, especificado como escalar entero positivo. De forma predeterminada, find(X,n) busca los primeros n elementos distintos de cero en X.

Dirección de búsqueda, especificada como la cadena 'first' o 'last'. Busque los últimos n elementos distintos de cero en X mediante find(X,n,'last').

Argumentos de salida

contraer todo

Índices a elementos no nulos, devueltos como vectores. Si X es un vector de fila, k también es un vector de fila. De lo contrario, k es un vector de columna. k es un array vacío cuando X es un array vacío o tiene elementos distintos de cero.

Puede devolver los valores no nulos de X mediante X(k).

Subíndices de fila, devueltos como vectores. En conjunto, row y col especifican los subíndices de X(row,col) correspondientes a los elementos distintos de cero en X.

Subíndices de columna, devueltos como vectores. En conjunto, row y col especifican los subíndices de X(row,col) correspondientes a los elementos distintos de cero en X.

Si X es un array multidimensional con N > 2, col es un índice lineal sobre las N-1 dimensiones finales de X. Esto conserva la relación X(row(i),col(i)) == v(i).

Elementos no nulos de X, devueltos como vectores.

Más acerca de

contraer todo

Índices lineales

Un índice lineal permite el uso de un único subíndice para indexar en un array, como A(k). MATLAB® trata el array como un único vector de columna con cada columna anexada a la parte inferior de la columna anterior. Así, la indexación lineal numera los elementos de las columnas de arriba a abajo y de izquierda a derecha.

Por ejemplo, considere una matriz de 3 por 3. Puede hacer referencia al elemento A(2,2) con A(5) y al elemento A(2,3) con A(8). El índice lineal cambia dependiendo del tamaño del array; A(5) devuelve un elemento ubicado de forma diferente para una matriz de 3 por 3 que para una matriz de 4 por 4.

Las funciones sub2ind y ind2sub son útiles para realizar conversiones entre subíndices e índices lineales.

Sugerencias

  • Para buscar elementos de array que cumplen una condición, utilice find junto con una expresión relacional. Por ejemplo, find(X<5) devuelve los índices lineales a los elementos de X que son inferiores a 5.

  • Para encontrar directamente los elementos de X que satisfagan la condición X<5, utilice X(X<5). Evite las llamadas a funciones como X(find(X<5)), que utilizan innecesariamente find en una matriz lógica.

  • Cuando se ejecuta find con una operación relacional como X>1, es importante recordar que el resultado de la operación relacional es una matriz lógica de unos y ceros. Por ejemplo, el comando [row,col,v] = find(X>1) devuelve un vector de columna de valores lógicos de 1 (true) para v.

  • Los subíndices de fila y columna, row y col, están relacionados con los índices lineales de k por k = sub2ind(size(X),row,col).

Capacidades ampliadas

Introducido antes de R2006a