EOSHIFT

変形組込み関数 (総称):次元数が 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 の値を持つスカラ整数。narray の次元数です。dim を省略した場合には値 1 が使用されます。

結果

結果は,array と同じ型,種別パラメタ,および形状を持つ配列です。

array の次元数が 1 の場合,すべての要素に同じ移動が適用されます。要素が配列の端から外にはみ出した場合,配列の反対側の端に boundary 値が格納されます。

array の次元数が 1 よりも大きい場合,結果の各部分配列 (s1, s2, ..., sdim-1, :, sdim+1, ..., sn) は以下のように移動されます。

要素が部分配列の端から外にはみ出した場合,部分配列の反対側の端に boundary 値が格納されます。

shift の値は,切捨て移動の量と向きを決定します。正の shift 値は,左 (行の場合) または上 (列の場合) へ移動します。負の shift 値は,右 (行の場合) または下 (列の場合) へ移動します。

互換性

CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB

関連情報

CSHIFTISHFTISHFTCTRANSPOSE

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 を返します。