`EOSHIFT` — 배열 요소의 끝 시프트(End-off shift)
EOSHIFT — 배열 요소의 끝 시프트(End-off shift)
배열의 요소들을 한 방향으로 밀되, 밀려나온 끝의 값은 그냥 버리고 반대쪽 끝엔 특정 값을 채워 넣고 싶을 때가 있어요. EOSHIFT(ARRAY, SHIFT)는 배열 요소를 '끝 잘림(end-off)' 방식으로 시프트하는 내장 함수예요.
본문
시그니처
RESULT = EOSHIFT(ARRAY, SHIFT [, BOUNDARY, DIM])
설명
EOSHIFT(ARRAY, SHIFT[, BOUNDARY, DIM])는 ARRAY의 요소를 DIM 차원을 따라 끝 시프트(end-off shift)해요. DIM을 생략하면 1로 취급해요. DIM은 1 ≤ DIM ≤ n 범위의 INTEGER 스칼라인데, 여기서 n은 ARRAY의 랭크예요.
ARRAY의 랭크가 1이면 모든 요소가SHIFT자리만큼 시프트돼요.- 랭크가 1보다 크면 해당 차원을 따라 모든 완전한 랭크-1 구간이 시프트돼요.
- 각 랭크-1 구간의 한쪽 끝으로 밀려나온 요소는 버려져요.
BOUNDARY가 있으면 그 값을 반대쪽 끝에 복사해서 채워요.BOUNDARY가 없으면 다음과 같은 값이 채워져요.ARRAY타입에 따라 달라요.
| 배열 타입 | 경계값(Boundary Value) |
|---|---|
| 수치형(Numeric) | ARRAY의 타입·종류의 0 |
| 논리형(Logical) | .FALSE. |
| 문자형(Character(len)) | len개의 공백 |
클래스
변형 함수(Transformational function)
인자
ARRAY— 어떤 타입이든 가능하지만 스칼라는 안 돼요.SHIFT—INTEGER타입.BOUNDARY—ARRAY와 같은 타입.DIM—INTEGER타입.
참고(Notes)
ARRAY는 UNSIGNED일 수도 있어요.
반환값
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 확장이에요.