16.1 Поиск элементов и проверка условий
Функции any и all полезны для определения того, удовлетворяют ли некоторые или все элементы матрицы некоторому условию. Функция find также полезна для определения элементов матрицы, удовлетворяющих заданному условию.
-
:
tf =any(x) -
:
tf =any(x, dim) -
Для вектора в качестве аргумента возвращает true (логическую 1), если любой элемент вектора отличен от нуля.
Для матрицы в качестве аргумента возвращает вектор-строку из логических единиц и нулей, каждый элемент которого указывает, отличен ли от нуля хотя бы один элемент соответствующего столбца матрицы. Например:
any (eye (2, 4)) ⇒ [ 1, 1, 0, 0 ]
Если указан необязательный аргумент dim, операция выполняется вдоль измерения dim. Например:
any (eye (2, 4), 2) ⇒ [ 1; 1 ]
См. также: all.
-
:
tf =all(x) -
:
tf =all(x, dim) -
Для вектора в качестве аргумента возвращает true (логическую 1), если все элементы вектора отличны от нуля.
Для матрицы в качестве аргумента возвращает вектор-строку из логических единиц и нулей, каждый элемент которого указывает, отличны ли от нуля все элементы соответствующего столбца матрицы. Например:
all ([2, 3; 1, 0]) ⇒ [ 1, 0 ]Если указан необязательный аргумент dim, операция выполняется вдоль измерения dim.
См. также: any.
Поскольку операторы сравнения (см. Операторы сравнения) возвращают матрицы из единиц и нулей, матрицу легко проверить на соответствие многим условиям, а не только на то, что ее элементы отличны от нуля. Например,
all (all (rand (5) < 0.9))
⇒ 0 проверяет случайную матрицу 5 на 5, чтобы определить, меньше ли 0.9 все ее элементы.
Обратите внимание: в контекстах условий (например, в проверочном выражении операторов if и while) Octave обрабатывает проверку так, как если бы вы ввели all (all (condition)).
-
:
z =xor(x, y) -
:
z =xor(x1, x2, …) -
Возвращает исключающее ИЛИ для x и y.
Для булевых выражений x и y
xor (x, y)истинно тогда и только тогда, когда истинно одно из выражений x или y. В противном случае, если x и y оба истинны или оба ложны,xorвозвращает false.Таблица истинности операции xor:
x y z - - - 0 0 0 1 0 1 0 1 1 1 1 0 Если задано более двух аргументов, операция xor применяется последовательно слева направо:
(...((x1 XOR x2) XOR x3) XOR ...)
-
:
y =diff(x) -
:
y =diff(x, k) -
:
y =diff(x, k, dim) -
Если x — вектор длины n,
diff (x)— вектор первых разностей x(2) - x(1), …, x(n) - x(n-1).Если x — матрица,
diff (x)— матрица разностей столбцов вдоль первого измерения, размер которого не равен единице.Второй аргумент необязателен. Если он указан,
diff (x, k), где k — неотрицательное целое число, возвращает разности k-го порядка. Значение k может превышать размер первого измерения матрицы, не равного единице. В этом случаеdiffпродолжает вычислять разности вдоль следующего измерения, размер которого не равен единице.Измерение, вдоль которого вычисляются разности, можно явно задать с помощью необязательной переменной dim. В этом случае вдоль этого измерения вычисляются разности k-го порядка. Если k превышает
size (x, dim), возвращается пустая матрица.
-
:
tf =isinf(x) -
Возвращает логический массив, элементы которого равны true там, где элементы x бесконечны, и false там, где это не так.
Например:
isinf ([13, Inf, NA, NaN]) ⇒ [ 0, 1, 0, 0 ]
-
:
tf =isnan(x) -
Возвращает логический массив, элементы которого равны true там, где элементы x являются значениями NaN, и false там, где это не так.
Значения NA также считаются значениями NaN. Например:
isnan ([13, Inf, NA, NaN]) ⇒ [ 0, 0, 1, 1 ]
-
:
tf =isfinite(x) -
Возвращает логический массив, элементы которого равны true там, где элементы x являются конечными значениями, и false там, где это не так.
Например:
isfinite ([13, Inf, NA, NaN]) ⇒ [ 1, 0, 0, 0 ]
-
:
[err, yi, …] =common_size(xi, …) -
Определяет, являются ли все входные аргументы скалярами или имеют одинаковый размер.
Если условие выполняется, err равно нулю, а yi — матрица общего размера, все элементы которой равны xi, если это скаляр, или самому xi в противном случае. Если входные данные нельзя привести к общему размеру, err равно 1, а yi равно xi. Например:
[err, a, b] = common_size ([1 2; 3 4], 5) ⇒ err = 0 ⇒ a = [ 1, 2; 3, 4 ] ⇒ b = [ 5, 5; 5, 5 ]Это полезно при реализации функций, аргументами которых могут быть скаляры или значения одинакового размера.
См. также: size, size_equal, numel, ndims.
-
:
idx =find(x) -
:
idx =find(x, n) -
:
idx =find(x, n, direction) -
:
[i, j] =find(…) -
:
[i, j, v] =find(…) -
Возвращает вектор индексов ненулевых элементов матрицы: вектор-строку, если x — вектор-строка, или вектор-столбец в противном случае.
Чтобы получить единый индекс для каждого элемента матрицы, Octave рассматривает столбцы матрицы как один длинный вектор (подобно тому, как хранятся массивы Fortran). Например:
find (eye (2)) ⇒ [ 1; 4 ]
Если указаны два входных аргумента, n задает максимальное число элементов для поиска, начиная с начала матрицы или вектора.
Если указаны три входных аргумента, direction должен быть равен
"first"или"last", что означает запрос первых или последних n индексов соответственно. Однако индексы всегда возвращаются в порядке возрастания.Если запрошены два выходных аргумента,
findвозвращает индексы строк и столбцов ненулевых элементов матрицы. Например:[i, j] = find (2 * eye (2)) ⇒ i = [ 1; 2 ] ⇒ j = [ 1; 2 ]Если запрошены три выходных аргумента,
findтакже возвращает вектор, содержащий ненулевые значения. Например:[i, j, v] = find (3 * eye (2)) ⇒ i = [ 1; 2 ] ⇒ j = [ 1; 2 ] ⇒ v = [ 3; 3 ]Если x — многомерный массив размера m x n x p x …, j содержит позиции столбцов так, как если бы x был преобразован в двумерную матрицу размера m x (n + p + …).
Обратите внимание, что эта функция особенно полезна для разреженных матриц: она извлекает ненулевые элементы в виде векторов, которые затем можно использовать для создания исходной матрицы. Например:
sz = size (a); [i, j, v] = find (a); b = sparse (i, j, v, sz(1), sz(2));
См. также: nonzeros.
-
:
idx =lookup(table, y) -
:
idx =lookup(table, y, opt) -
Поиск значений в отсортированной таблице.
Эта функция обычно используется как предварительный этап интерполяции.
Если таблица возрастающая, имеет длину N и
idx = lookup (table, y), тоtable(idx(i)) <= y(i) < table(idx(i+1))для всехy(i), находящихся в таблице. Еслиy(i) < table(1), тоidx(i)равно 0. Еслиy(i) >= table(end)илиisnan (y(i)), тоidx(i)равно N.Если таблица убывающая, условия меняются на противоположные. Для немонотонных таблиц пустые интервалы всегда пропускаются. Результат не определен, если table не является монотонной или содержит NaN.
Сложность поиска составляет O(M*log(N)), где M — размер y. В частном случае, когда y также отсортирован, сложность составляет O(min (M*log(N), M+N)).
table и y также могут быть массивами ячеек со строками (или y может быть одной строкой). В этом случае поиск строк выполняется с использованием лексикографического сравнения.
Если указан opts, он должен быть строкой с буквами, обозначающими дополнительные параметры.
m-
Совпадение.
table(idx(i)) == y(i), еслиy(i)встречается в таблице; в противном случаеidx(i)равно нулю. b-
Логический параметр.
idx(i)— логическая 1 или 0, указывающая, содержится лиy(i)в таблице. l-
Левый. Для числового поиска крайний левый подынтервал расширяется до минус бесконечности (то есть все индексы не меньше 1).
rПравый. Для числового поиска крайний правый подынтервал расширяется до бесконечности (то есть все индексы не больше N-1).
Примечание: если table не отсортирована, результаты
lookupбудут непредсказуемыми.
Если нужно проверить, существует ли переменная, а не свойства, которыми могут обладать ее элементы, см. раздел Состояние переменных.
© 1996–2026 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v9.4.0/Finding-Elements-and-Checking-Conditions.html