Main Content

find

Rechercher des indices et des valeurs d’éléments non nuls

Description

exemple

k = find(X) renvoie un vecteur contenant les indices linéaires de chaque élément non nul dans le tableau X.

  • Si X est un vecteur, alors find renvoie un vecteur avec la même orientation que X.

  • Si X est un tableau multidimensionnel, find renvoie un vecteur colonne des indices linéaires du résultat.

exemple

k = find(X,n) renvoie les n premiers indices correspondant aux éléments non nul dans X.

exemple

k = find(X,n,direction), où direction correspond à 'last', identifie les n derniers indices correspondant aux éléments non nuls dans X. La valeur par défaut pour direction est 'first', qui recherche les n premiers indices correspondant aux éléments non nuls.

exemple

[row,col] = find(___) renvoie les indices de ligne et de colonne pour chaque élément non nul dans le tableau X en utilisant n’importe quel argument des syntaxes précédentes en entrée.

exemple

[row,col,v] = find(___) renvoie également le vecteur v, qui contient les éléments non nuls de X.

Exemples

réduire tout

Recherchez les éléments non nuls dans une matrice de 3 x 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

Utilisez l’opérateur logique not sur X pour localiser les zéros.

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

     2
     3
     4
     6

Recherchez les cinq premiers éléments inférieurs à 10 dans une matrice du carré magique de dimension 4 x 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

Visualisez les éléments correspondants de X.

X(k)
ans = 5×1

     5
     9
     4
     2
     7

Pour rechercher une valeur de nombre entier spécifique, utilisez l’opérateur ==. Par exemple, recherchez l’élément égal à 13 dans un vecteur de 1 x 10 de nombres entiers impairs.

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

     1     3     5     7     9    11    13    15    17    19

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

Pour rechercher une valeur non entière, utilisez une valeur de tolérance basée sur vos données. À défaut, le résultat pourrait être une matrice vide en raison d’une erreur d’arrondi de virgule flottante.

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

Créez une matrice de carré magique de dimension 6 x 6 avec tous les éléments indexés par un nombre impair égaux à zéro.

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

Localisez les quatre derniers non nuls.

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

    30
    32
    34
    36

Recherchez les trois premiers éléments d’une matrice de 4 x 4 qui sont supérieurs à 0 et inférieurs à 10. Spécifiez deux sorties pour renvoyer les indices de ligne et de colonne des éléments.

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 première instance est X(2,1), ce qui correspond à 8.

Recherchez les éléments non nuls dans une matrice de 3 x 3. Spécifiez trois sorties pour renvoyer les indices de ligne et de colonne, ainsi que les valeurs des éléments.

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

Recherchez les éléments non nuls dans un tableau de 4 x 2 x 3. Spécifiez deux sorties, row et col, pour renvoyer les indices de ligne et de colonne des éléments non nuls. Lorsque l’entrée est un tableau multidimensionnel (N > 2), find renvoie col en tant qu’index linéaire sur les N-1 dimensions suivantes 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

Arguments d'entrée

réduire tout

Tableau en entrée, spécifié sous forme de scalaire, de vecteur, de matrice ou de tableau multidimensionnel.

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char
Support des nombres complexes : Oui

Nombre d’éléments non nuls à rechercher, spécifié sous forme d'un scalaire entier positif. Par défaut, find(X,n) recherche les n premiers éléments non nul dans X.

Sens de la recherche, spécifié par la chaîne 'first' ou 'last'. Recherchez les n derniers éléments non nuls dans X à l’aide de find(X,n,'last').

Arguments de sortie

réduire tout

Indices des éléments non nuls, renvoyés sous forme de vecteur.

  • Si X est un vecteur ligne, alors k est également un vecteur ligne. Autrement, k est un vecteur colonne.

  • k est un vecteur ligne ou colonne vide lorsque X est un tableau vide ou ne dispose d’aucun élément non nul.

  • find utilise la convention suivante : k est une matrice vide [] lorsque X est une matrice vide [].

Vous pouvez renvoyer les valeurs non nulles de X à l’aide de X(k).

Indices de ligne, renvoyés sous forme de vecteur. Combinées, row et col spécifient les indices X(row,col) correspondant aux éléments non nuls dans X.

Indices de colonne, renvoyés sous forme de vecteur. Combinées, row et col spécifient les indices X(row,col) correspondant aux éléments non nuls dans X.

si X est un tableau multidimensionnel avec N > 2, alors col est un index linéaire sur les N-1 dimensions suivantes de X. Cela préserve la relation X(row(i),col(i)) == v(i).

Éléments non nuls de X, renvoyés sous forme de vecteur.

En savoir plus

réduire tout

Indices linéaires

Un index linéaire autorise l’utilisation d’un indice unique pour l’indexation dans un tableau, tel que A(k). MATLAB® traite le tableau en tant qu'un vecteur colonne unique avec chaque colonne du tableau ajoutée au bas de la précédente. Ainsi, l’indexation linéaire numérote les éléments dans les colonnes du haut vers le bas, et de gauche à droite.

Prenons l’exemple d’une matrice 3 x 3. Vous pouvez référencer l’élément A(2,2) avec A(5), et l’élément A(2,3) avec A(8). L’index linéaire change en fonction de la taille du tableau ; A(5) renvoie un élément localisé différemment pour une matrice de 3 x 3 par rapport à une matrice de 4 x 4.

Les fonctions sub2ind et ind2sub sont utiles dans le cadre de la conversion entre indices et indices linéaires.

Conseils

  • Pour rechercher des éléments de tableau qui satisfont à une condition, utilisez find en conjonction avec une expression relationnelle. Par exemple, find(X<5) renvoie les indices linéaires aux éléments dans X qui sont inférieurs à 5.

  • Pour rechercher directement les éléments de X qui satisfont à la condition X<5, utilisez X(X<5). Évitez d’appeler des fonctions telles que X(find(X<5)), qui utilisent inutilement find sur une matrice logique.

  • Lorsque vous exécutez find avec une opération relationnelle comme X>1, il est important de se rappeler que le résultat de l’opération relationnelle est une matrice logique de uns et de zéros. Par exemple, la commande [row,col,v] = find(X>1) renvoie un vecteur colonne de valeurs logiques 1 (true) pour v.

  • Les indices de ligne et de colonne row et col sont liés aux indices linéaires de k par k = sub2ind(size(X),row,col).

Capacités étendues

Historique des versions

Introduit avant R2006a