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), 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

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

свернуть все

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

Типы данных: 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.

The 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