Этот пример показывает, как использовать any
и функции all
, чтобы редуцировать целый массив к одному логическому значению.
any
и функции all
являются естественными расширениями логического |
(OR) и &
(AND) операторы, соответственно. Однако вместо того, чтобы сравнить всего два элемента, 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
наряду с логическим НЕ оператор, ~
, чтобы определить, какие элементы в 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, обычно требуется два приложения одной из функций, чтобы уменьшать 2D матрицу в одно логическое условие, такое как 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)
, не являются тем же размером, сначала необходимо уменьшать каждую диагональ до одного скалярного логического условия прежде, чем сравнить их. Можно использовать операцию ИЛИ короткой схемы ||
, чтобы выполнить сравнение, с тех пор если какие-либо элементы в первой диагонали являются даже затем целым выражением, оценивает к истине независимо от того, что появляется на правой стороне оператора.
any(diag(A)) || any(diag(A,1))
ans = logical
1
Logical Operators: Short Circuit
| all
| and
| any
| or
| xor