変形組込み関数 (総称):次元数が 1 である配列に対して切捨て移動を行います。または,次元数が 2 以上である配列の指定された次元に沿った次元数が 1 である部分配列のすべてにおいて切捨て移動を行います。
部分配列の端から外にはみ出した要素は捨てられ,境界値のコピーが反対側の端に取り込まれます。個々の部分配列は,異なる境界値を持つことができ,異なる方向に異なる量だけ移動することができます。
形式
result = EOSHIFT (array, shift [, boundary][, dim])
array
(入力) 配列(任意のデータ型)。
shift
(入力) スカラ整数であるか,array よりも次元数が 1 だけ小さく,array の形状を (d1, d2, ..., dn) として (d1, d2, ..., ddim-1, ddim+1, ..., dn) の形状を持つ配列。
boundary
(省略可能,入力) array と同じ型と種別パラメタ。これはスカラであるか,array よりも次元数が 1 だけ小さく,(1, d2, ..., ddim-1, ddim+1, ..., dn) の形状を持つ配列でなくてはなりません。boundary が指定されていない場合,(array のデータ型に応じて) 以下の基本値が使用されます。
array の型 boundary の値 整数型 0 実数型 0.0 複素数型 (0.0, 0.0) 論理型 false 文字型 (len) len 個の空白
dim
(省略可能,入力) 範囲 1 ~ n の値を持つスカラ整数。n は array の次元数です。dim を省略した場合には値 1 が使用されます。
結果
結果は,array と同じ型,種別パラメタ,および形状を持つ配列です。
array の次元数が 1 の場合,すべての要素に同じ移動が適用されます。要素が配列の端から外にはみ出した場合,配列の反対側の端に boundary 値が格納されます。
array の次元数が 1 よりも大きい場合,結果の各部分配列 (s1, s2, ..., sdim-1, :, sdim+1, ..., sn) は以下のように移動されます。
shift がスカラの場合,shift の値だけ移動されます。
shift が配列の場合,shift(s1, s2, ..., sdim-1, sdim+1, ..., sn) の対応する値だけ移動されます。
要素が部分配列の端から外にはみ出した場合,部分配列の反対側の端に boundary 値が格納されます。
shift の値は,切捨て移動の量と向きを決定します。正の shift 値は,左 (行の場合) または上 (列の場合) へ移動します。負の shift 値は,右 (行の場合) または下 (列の場合) へ移動します。
互換性
CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB
関連情報
例
V が配列 (1, 2, 3, 4, 5, 6) であるとします。
EOSHIFT (V, SHIFT=2) は,V 中の要素を左に 2 だけ移動させ,値 (3, 4, 5, 6, 0, 0) を生成します。1 と 2 は先頭の外にはみ出され,末尾には基本の BOUNDARY 値を持つ要素が 2 つ挿入されます。
EOSHIFT (V, SHIFT= -3, BOUNDARY= 99) は,V の中の要素を右に 3 だけ移動させ,値 (99, 99, 99, 1, 2, 3) を生成します。4,5,および 6 は末尾の外にはみ出され,先頭には BOUNDARY 値の 99 を持つ要素が 3 つ挿入されます。
M が配列
[ 1 2 3 ] [ 4 5 6 ] [ 7 8 9 ]
であるとします。
EOSHIFT (M, SHIFT = 1, BOUNDARY = '*', DIM = 2) は結果
[ 2 3 * ] [ 5 6 * ] [ 8 9 * ]
を生成します。
行 1,2,および 3 の各要素は左に 1 だけ移動されます。これにより,個々の行の最初の要素は先頭の外にはみ出され,末尾に BOUNDARY 値が格納されます。
EOSHIFT (M, SHIFT = -1, DIM = 1) は結果
[ 0 0 0 ] [ 1 2 3 ] [ 4 5 6 ]
を生成します。
列 1,2,および 3 の中の各要素は下に 1 だけ移動されます。これにより,個々の列の最後の要素は末尾の外にはみ出され,先頭に BOUNDARY 値が格納されます。
EOSHIFT (M, SHIFT = (/1, -1, 0/), BOUNDARY = (/ '*', '?', '/' /), DIM = 2) は結果
[ 2 3 * ] [ ? 4 5 ] [ 7 8 9 ]
を生成します。
行 1 の各要素は左に 1 だけ移動され,最初の要素が先頭の外にはみ出されて,末尾に BOUNDARY 値の * が格納されます。行 2 の各要素は右に 1 だけ移動され,最後の要素が末尾の外にはみ出されて,先頭に BOUNDARY 値の ? が格納されます。行 3 の要素はまったく移動されないので,指定された BOUNDARY 値は使用されません。
以下に他の例を示します。
INTEGER shift(3) CHARACTER(1) array(3, 3), AR1(3, 3) array = RESHAPE ((/'A', 'D', 'G', 'B', 'E', 'H', & 'C', 'F', 'I'/), (/3,3/)) ! 配列は A B C ! D E F ! G H I shift = (/-1, 1, 0/) AR1 = EOSHIFT (array, shift, BOUNDARY = (/'*','?','#'/), DIM= 2) ! * A B ! E F ? ! G H I を返します。