Редуцирование логических массивов к единственному значению

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

Смотрите также

| | | | |

Была ли эта тема полезной?