find

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

Описание

пример

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

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

  • Если 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Поиск возвращает 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

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

свернуть все

Входной массив, заданный как скалярный, векторный, матричный или многомерный массив.

Типы данных: 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 пустой массив или не имеет никаких ненулевых элементов.

  • find использует соглашение что 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