PACK(ARRAY, MASK, VECTOR)
目的
マスクの制御に従って、配列から一部またはすべてのエレメントを取り出し、 それらを 1 次元の配列に圧縮します。
クラス
変換関数
引数型および属性
- ARRAY
- ソース配列。この配列のエレメントが結果の一部になります。対応する実引数は、どのようなデータ型であってもかまいません。
- MASK
- ARRAY に合致する型 LOGICAL の引数。 これは、ソース配列からどのエレメントが取り出されるのかを決定します。スカラーである場合、 その値が ARRAY のすべてのエレメントに適用されます。
- VECTOR (オプション)
- 埋め込み配列。マスクで選択されるエレメントが十分でない場合に、結果を埋めるためにこの配列のエレメントが使用されます。これは、ARRAY とデータ型および型パラメーターが同じ 1 次元配列であり、MASK で値が真になっている以上のエレメント数がなければなりません。MASK が スカラーで、その値が .TRUE. である場合、VECTOR の エレメント数は ARRAY の配列エレメント数以上でなければなりません。
結果値
結果は、常に、データ型と型パラメーターが ARRAY と同じである 1 次元配列です。
結果のサイズは、オプションの引数によって次のようになります。
- VECTOR が指定されている場合、結果の配列のサイズは、VECTOR のサイズと等しくなります。
- それ以外の場合には、MASK が .TRUE. の値を持つスカラーであれば、MASK 内の真の配列エレメントの数か、または、ARRAY 内のエレメントの数に等しくなります。
ARRAY の配列エレメントが取り出されて、結果の配列エレメントを 形成します。MASK 内の対応する配列エレメントが .TRUE. である場合、ARRAY 内のそのエレメントが結果の最後に置かれます。
エレメントが結果内に空のままで残ると (VECTOR が存在し、mask 内の .TRUE. 値よりも多くのエレメントを持っていることが原因)、結果内の残りのエレメントは VECTOR からの対応する値に設定されます。
例
! A is the array | 0 7 0 |
! | 1 0 3 |
! | 4 0 0 |
! Take only the non-zero elements of this sparse array.
! If there are less than six, fill in -1 for the rest.
RES = PACK(A, MASK= A .NE. 0, VECTOR=(/-1,-1,-1,-1,-1,-1/)
! The result is (/ 1, 4, 7, 3, -1, -1 /).
! Elements 1, 4, 7, and 3 are taken in order from A
! because the value of MASK is true only for these
! elements. The -1s are added to the result from VECTOR
! because the length (6) of VECTOR exceeds the number
! of .TRUE. values (4) in MASK.