`COUNT` — 논리 배열에서 참 개수 세기
COUNT — 논리 배열에서 참 개수 세기
배열 안에 조건을 만족하는 원소가 몇 개인지 세고 싶을 때가 있어요. 마스크에 .TRUE.가 몇 개인지 세는 방법부터, 각 차원 방향으로 몇 개씩인지 세는 방법까지 COUNT가 처리해 줘요.
본문
시그니처
RESULT = COUNT(MASK [, DIM, KIND])
설명
논리 마스크 MASK에 있는 .TRUE. 원소의 개수를 세어요. DIM 인자가 주어지면, 배열의 DIM 방향으로 각 행(row)을 따라 원소의 개수를 셉니다. 배열의 크기가 0이거나 MASK의 모든 원소가 .FALSE.라면 결과는 0이에요.
분류
변환 함수(Transformational function)
인자
MASK— 타입이LOGICAL이어야 해요.DIM— (선택) 타입이INTEGER여야 해요.KIND— (선택) 결과의 kind 매개변수를 나타내는 스칼라INTEGER상수식이에요.
반환값
반환값은 INTEGER 타입이고 kind는 KIND를 따라가요. KIND가 없으면 기본 정수 kind(default integer kind)가 돼요. DIM이 주어지면 결과는 ARRAY의 랭크보다 하나 작은 배열이며, ARRAY의 모양에서 DIM 차원을 뺀 크기를 가져요.
예제
program test_count
integer, dimension(2,3) :: a, b
logical, dimension(2,3) :: mask
a = reshape( (/ 1, 2, 3, 4, 5, 6 /), (/ 2, 3 /))
b = reshape( (/ 0, 7, 3, 4, 5, 8 /), (/ 2, 3 /))
print '(3i3)', a(1,:)
print '(3i3)', a(2,:)
print *
print '(3i3)', b(1,:)
print '(3i3)', b(2,:)
print *
mask = a.ne.b
print '(3l3)', mask(1,:)
print '(3l3)', mask(2,:)
print *
print '(3i3)', count(mask)
print *
print '(3i3)', count(mask, 1)
print *
print '(3i3)', count(mask, 2)
end program test_count
두 배열 a, b를 비교해 만든 마스크에서, 전체 참 개수(count(mask)), 각 열 차원별 개수(count(mask, 1)), 각 행 차원별 개수(count(mask, 2))를 출력하는 걸 볼 수 있어요.
표준
Fortran 90 이상이며, KIND 인자는 Fortran 2003 이상이에요.