`EOSHIFT` — 배열 요소의 끝 시프트(End-off shift)

EOSHIFT — 배열 요소의 끝 시프트(End-off shift)

배열의 요소들을 한 방향으로 밀되, 밀려나온 끝의 값은 그냥 버리고 반대쪽 끝엔 특정 값을 채워 넣고 싶을 때가 있어요. EOSHIFT(ARRAY, SHIFT)는 배열 요소를 '끝 잘림(end-off)' 방식으로 시프트하는 내장 함수예요.

출처: gfortran — EOSHIFT

본문

시그니처

RESULT = EOSHIFT(ARRAY, SHIFT [, BOUNDARY, DIM])

설명

EOSHIFT(ARRAY, SHIFT[, BOUNDARY, DIM])ARRAY의 요소를 DIM 차원을 따라 끝 시프트(end-off shift)해요. DIM을 생략하면 1로 취급해요. DIM1 ≤ DIM ≤ n 범위의 INTEGER 스칼라인데, 여기서 nARRAY의 랭크예요.

  • ARRAY의 랭크가 1이면 모든 요소가 SHIFT 자리만큼 시프트돼요.
  • 랭크가 1보다 크면 해당 차원을 따라 모든 완전한 랭크-1 구간이 시프트돼요.
  • 각 랭크-1 구간의 한쪽 끝으로 밀려나온 요소는 버려져요.
  • BOUNDARY가 있으면 그 값을 반대쪽 끝에 복사해서 채워요.
  • BOUNDARY가 없으면 다음과 같은 값이 채워져요. ARRAY 타입에 따라 달라요.
배열 타입 경계값(Boundary Value)
수치형(Numeric) ARRAY의 타입·종류의 0
논리형(Logical) .FALSE.
문자형(Character(len)) len개의 공백

클래스

변형 함수(Transformational function)

인자

  • ARRAY — 어떤 타입이든 가능하지만 스칼라는 안 돼요.
  • SHIFTINTEGER 타입.
  • BOUNDARYARRAY와 같은 타입.
  • DIMINTEGER 타입.

참고(Notes)

ARRAYUNSIGNED일 수도 있어요.

반환값

ARRAY 인자와 같은 타입·랭크의 배열을 반환해요.

예제

program test_eoshift
    integer, dimension(3,3) :: a
    a = reshape( (/ 1, 2, 3, 4, 5, 6, 7, 8, 9 /), (/ 3, 3 /))
    print '(3i3)', a(1,:)
    print '(3i3)', a(2,:)
    print '(3i3)', a(3,:)    
    a = EOSHIFT(a, SHIFT=(/1, 2, 1/), BOUNDARY=-5, DIM=2)
    print *
    print '(3i3)', a(1,:)
    print '(3i3)', a(2,:)
    print '(3i3)', a(3,:)
end program test_eoshift

각 행을 따라 서로 다른 만큼(/1, 2, 1/) 시프트하고, 밀려난 자리를 -5로 채우는 예시예요. DIM=2로 행 방향(가로) 시프트를 지정했어요.

표준

Fortran 90 이상이며, UNSIGNED에 대한 지원은 GNU 확장이에요.