Main Content

논리형 배열을 단일 값으로 축소

이 예제에서는 any 함수와 all 함수를 사용하여 전체 배열을 단일 논리값으로 축소하는 방법을 보여줍니다.

any 함수와 all 함수는 각각 논리 연산자 |(OR) 및 &(AND)의 확장된 개념입니다. 그러나, any 함수와 all 함수는 두 개의 요소만 비교하는 대신 배열의 특정 차원에 포함된 모든 요소를 비교합니다. 이는 비교하려는 요소를 모두 & 연산자 또는 | 연산자로 연결하고, 그 결과로 생성되는 긴 논리식을 any 함수 또는 all 함수로 평가하는 것과 같습니다. 따라서, 주요 논리 연산자와 달리 any 함수와 all 함수는 해당 연산이 수행되는 배열의 차원 크기를 1이 되도록 축소합니다. 이를 통해 많은 논리값을 단일 논리 조건으로 축소할 수 있습니다.

먼저, 1과 25 사이의 임의의 정수를 포함하는 행렬 A를 생성합니다. 재현이 가능하도록 난수 생성기를 디폴트 상태로 재설정합니다.

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

다음으로, 논리 NOT 연산자(~)와 함께 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이 되도록 축소하므로, 일반적으로 이러한 함수 중 하나를 두 번 적용하여 2차원 행렬을 단일 논리 조건으로 축소합니다(예: 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가 되므로 쇼트서킷 OR 연산자 ||를 사용하여 비교를 수행할 수 있습니다.

any(diag(A)) || any(diag(A,1))
ans = logical
   1

참고 항목

| | | | | |