exponenta event banner

Сокращение количества логических массивов до одного значения

В этом примере показано, как использовать any и all функции для уменьшения всего массива до одного логического значения.

any и all функции являются естественными расширениями логического | (ИЛИ) и & Операторы (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 функция вместе с логическим оператором 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

См. также

| | | | |