В этом примере показано, как использовать 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