В этом примере показано, как использовать any и all функции для сокращения всего массива до одного логического значения.
The any и all функции являются естественными расширениями логического | (OR) и & (И) операторы, соответственно. Однако, вместо того, чтобы сравнивать только два элемента, any и all функции сравнивают все элементы в конкретной размерности массива. Это как если бы все эти элементы были соединены & или | операторы и any или all функции вычисляют получившиеся длинные логические выражения. Поэтому, в отличие от основных логических операторов, any и all функции уменьшают размер измерения массива, с которым они работают, так что он имеет размер 1. Это позволяет сократить количество логических значений в одно логическое условие.
Сначала создайте матрицу A который содержит случайные целые числа от 1 до 25. Установите генератор случайных чисел в состояние по умолчанию для повторяемости.
rng default
A = randi(25,5)A = 5×5
21 3 4 4 17
23 7 25 11 1
4 14 24 23 22
23 24 13 20 24
16 25 21 24 17
Далее используйте mod функция наряду с логическим оператором NOT, ~, для определения элементов в A ровные.
A = ~mod(A,2)
A = 5x5 logical array
0 0 1 1 0
0 0 0 0 0
1 1 1 0 1
0 1 0 1 1
1 0 0 1 0
Получившиеся матрицы имеют значения логических 1 (true) где элемент четный, и логический 0 (false) где элемент нечетный.
Начиная с any и all функции сокращают размерность, с которой они работают, до размера 1, обычно требуется два приложения одной из функций, чтобы уменьшить матрицу 2-D в одно логическое условие, такое как any(any(A)). Однако, если вы используете обозначение A(:) для учета всех элементов A в качестве одного вектора-столбца можно использовать any(A(:)) получить ту же логическую информацию без вложения вызовов функций.
Определите, есть ли элементы в A ровные.
any(A(:))
ans = logical
1
Вы можете выполнить логические и реляционные сравнения в рамках вызова функции к any или all. Это облегчает быстрое тестирование массива на наличие различных свойств.
Определите, все ли элементы в A нечетные.
all(~A(:))
ans = logical
0
Определите, являются ли какие-либо основные или супер диагональные элементы в A ровные. Поскольку векторы вернулись по diag(A) и diag(A,1) не те же размеры, вам сначала нужно уменьшить каждую диагональ до одного скалярного логического условия, прежде чем сравнивать их. Можно использовать оператор короткая схема || для выполнения сравнения, поскольку если какие-либо элементы в первой диагонали даже являются, то все выражение вычисляется как true независимо от того, что появляется на правой стороне оператора.
any(diag(A)) || any(diag(A,1))
ans = logical
1
all | and | any | Logical Operators: Short Circuit | or | xor