PACK

変形組込み関数 (総称):配列から要素を取り出し,その要素を選別値に従って次元数 1 の配列に詰め込みます。

形式

result = PACK (array, mask [, vector] )

array
(入力) 任意のデータ型の配列。

mask
(入力) 論理型配列。array と形状適合でなくてはなりません。これは array のどの要素を取り出すかを決定します。

vector
(省略可能,入力) array と同じ型と種別パラメタを持つ次元数 1 の配列。大きさは,mask 中の真の要素の数を t として,t 以上でなくてはなりません。mask が真の値を持つスカラである場合,vectorarray に含まれている要素の数以上の要素を持っていなくてはなりません。

vector 中の要素は,mask によって選択された要素の数が足りなかった場合に,結果配列を充填するために使用されます。

結果

結果は,array と同じ型および種別パラメタを持つ次元数 1 の配列です。vector が存在する場合,結果の大きさは vector と等しくなります。vector が存在しない場合,結果の大きさは mask 中の真の要素の数か,(mask が真の値を持つスカラである場合には) array 中の要素の数です。

array 中の要素が配列要素順序に従って処理されて,結果配列が作成されます。結果の要素 i は,maski 番目の真の要素に対応する array の要素です。vector が存在し,mask 中の真の値よりも多くの要素を含んでいる場合,結果の要素のうち (mask によると真にならなかったため) 空になっている要素は,vector 中の対応する値に設定されます。

互換性

CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB

関連情報

UNPACK

N が配列

	[ 0  8  0 ]
	[ 0  0  0 ]
	[ 7  0  0 ]

であるとします。

PACK (N, MASK=N .NE. 0, VECTOR=(/1, 3, 5, 9, 11, 13/)) は,結果 (7, 8, 5, 9, 11, 13) を生成します。

PACK (N, MASK=N .NE. 0) は結果 (7, 8) を生成します。

以下に他の例を示します。

	INTEGER array(2, 3), vec1(2), vec2(5)
	LOGICAL mask (2, 3)
	array = RESHAPE((/7, 0, 0, -5, 0, 0/), (/2, 3/))
	mask = array .NE. 0
	! array は 7  0 0 ; mask は T F F
	!          0 -5 0            F T F です。

	VEC1 = PACK(array, mask)		! ( 7, -5 ) を返します。
	VEC2 = PACK(array, array .GT. 0, VECTOR= (/1,2,3,4,5/))
	! ( 7, 2, 3, 4, 5 ) を返します。