поиск

Найдите индексы и значения ненулевых элементов

Синтаксис

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

Описание

пример

k = find(X) возвращает вектор, содержащий линейные индексы каждого ненулевого элемента в массиве X.

  • Если X является вектором, то find возвращает вектор с той же ориентацией как X.

  • Если X является многомерным массивом, то find возвращает вектор-столбец линейных индексов результата.

  • Если X не содержит ненулевых элементов или пуст, то find возвращает пустой массив.

пример

k = find(X,n) возвращает первые индексы n, соответствующие ненулевым элементам в X.

пример

k = find(X,n,direction), то, где direction является 'last', находит последние индексы n, соответствующие ненулевым элементам в X. Значением по умолчанию для direction является 'first', который находит первые индексы n, соответствующие ненулевым элементам.

пример

[row,col] = find(___) возвращает индексы строки и столбца каждого ненулевого элемента в массиве X с помощью любого из входных параметров в предыдущих синтаксисах.

пример

[row,col,v] = find(___) также возвращает векторный v, который содержит ненулевые элементы X.

Примеры

свернуть все

Найдите ненулевые элементы в 3х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

Используйте логический оператор not на X, чтобы определить местоположение нулей.

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

     2
     3
     4
     6

Найдите первые пять элементов, которые являются меньше чем 10 в матрице магического квадрата 4 на 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

Просмотрите соответствующие элементы X.

X(k)
ans = 5×1

     5
     9
     4
     2
     7

Чтобы найти определенное целочисленное значение, используйте оператор ==. Например, найдите элемент равным 13 в 1 10 вектор нечетных целых чисел.

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

     1     3     5     7     9    11    13    15    17    19

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

Чтобы найти значение нецелого числа, используйте значение допуска на основе своих данных. В противном случае результатом иногда является пустая матрица из-за ошибки округления с плавающей точкой.

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

Создайте 6 6 матрицу магического квадрата со всеми нечетно индексированными равными нулю элементами.

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

Найдите последние четыре ненуля.

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

    30
    32
    34
    36

Найдите первые три элемента в матрице 4 на 4, которые больше, чем 0 и меньше, чем 10. Задайте два выходных параметров, чтобы возвратить индексы строки и столбца в элементы.

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

Первой инстанцией является X(2,1), который является 8.

Найдите ненулевые элементы в 3х3 матрице. Задайте три выходных параметров, чтобы возвратить индексы строки, индексы столбца и значения элемента.

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

Найдите ненулевые элементы в 4 2 3 массивами. Задайте два выходных параметров, row и col, чтобы возвратить индексы строки и столбца ненулевых элементов. Когда вход является многомерным массивом (N > 2), find возвращает col как линейный индекс по последующим измерениям N-1 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

Входные параметры

свернуть все

Входной массив, заданный как скалярный, векторный, матричный или многомерный массив. Если X является пустым массивом или не имеет никаких ненулевых элементов, то k является пустым массивом.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char
Поддержка комплексного числа: Да

Количество ненулей, чтобы найти, заданный как положительный целочисленный скаляр. По умолчанию find(X,n) ищет первый n ненулевые элементы в X.

Поисковое направление, заданное как строка 'first' или 'last'. Ищите последний n ненулевые элементы в X с помощью find(X,n,'last').

Выходные аргументы

свернуть все

Индексы к ненулевым элементам, возвращенным как вектор. Если X является вектором - строкой, то k является также вектором - строкой. В противном случае k является вектор-столбцом. k является пустым массивом, когда X является пустым массивом или не имеет никаких ненулевых элементов.

Можно возвратить ненулевые значения в X с помощью X(k).

Индексы строки, возвращенные как вектор. Вместе, row и col указывают индексы X(row,col), соответствующие ненулевым элементам в X.

Индексы столбца, возвращенные как вектор. Вместе, row и col указывают индексы X(row,col), соответствующие ненулевым элементам в X.

Если X является многомерным массивом с N > 2, то col является линейным индексом по последующим измерениям N-1 X. Это сохраняет отношение X(row(i),col(i)) == v(i).

Ненулевые элементы X, возвращенного как вектор.

Больше о

свернуть все

Линейные индексы

Линейный индекс позволяет использованию одного индекса индексировать в массив, такой как A(k). MATLAB® обрабатывает массив как вектор отдельного столбца с каждым столбцом, добавленным к нижней части предыдущего столбца. Таким образом, линейные порядковые номера элементы в столбцах сверху донизу, слева направо.

Например, рассмотрите 3х3 матрицу. Можно сослаться на элемент A(2,2) с A(5) и элемент A(2,3) с A(8). Линейный индекс изменяется в зависимости от размера массива; A(5) возвращает по-другому расположенный элемент для 3х3 матрицы, чем он делает для матрицы 4 на 4.

sub2ind и функции ind2sub полезны в преобразовании между индексами и линейными индексами.

Советы

  • Чтобы найти элементы массива, которые удовлетворяют условию, используйте find в сочетании с выражением отношения. Например, find(X<5) возвращает линейные индексы в элементы в X, которые являются меньше, чем 5.

  • Чтобы непосредственно найти элементы в X, которые удовлетворяют условие X<5, используйте X(X<5). Избегайте вызовов функции как X(find(X<5)), которые излишне используют find на логической матрице.

  • Когда вы выполняете find с реляционной операцией как X>1, важно помнить, что результатом реляционной операции является логическая матрица единиц и нулей. Например, команда [row,col,v] = find(X>1) возвращает вектор-столбец логического 1 (true) значения для v.

  • Индексы строки и столбца, row и col, связаны с линейными индексами в k k = sub2ind(size(X),row,col).

Расширенные возможности

Представлено до R2006a

Для просмотра документации необходимо авторизоваться на сайте