RESHAPE
copyright

green dotRESHAPE

書式 RESHAPE(SOURCE,SHAPE[,PAD][,ORDER])
機能 与えられた配列SOURCEの要素から、指定された形状の配列を作成する。
結果の要素を置換した添字順序ORDER(1),…,ORDER(n)で並べ替えたものは、 SOURCEの要素を通常の配列要素順序で並べ、足りなければPADの要素を 配列要素順序で続け、更に足りなければPADの要素を配列要素順序で 必要な回数だけ繰り返したものと等しい。
引数
SOURCE任意の型の配列で、PADが省略されているか またはその大きさが0のとき、SOURCEの大きさは PRODUCT(SHAPE)の値以上でなければならない。
SHAPE 整数型の1次元配列で、大きさは定数でなければならない。
大きさは、1〜7の正の数(次元数)でなければならない。
どの要素の値も負であってはならない。
PAD
(省略可能)
SOURCEと同じ型、種別型パラメタの配列
ORDER
(省略可能)
整数型、SHAPEと同じ形状で値は、 (1,2,…,n) を並べ替えたものでなければならない。
nは、SHAPEの大きさとする。
ORDERを省略したとき、値 (1,2,…,n)を指定したものとする。
戻り値 型、種別型パラメタは引数SOURCEと同じで形状は引数SHAPEと同じ配列である。
結果の大きさはSHAPEの要素の値の積とする。

green dotサンプルプログラム1

1次元配列vectからshpで指定した2行3列の配列rshpを作成する。
    ┌────┬────┬────┬────┬────┬────┐
vect│ 10 │ 20 │ 30 │ 40 │ 50 │ 60 │
    └────┴────┴────┴────┴────┴────┘
    ┌────┬────┐
shp │  2 │  3 │
    └────┴────┘
    ┌────┬────┬────┐
rshp│ 10 │ 30 │ 50 │
    │ 20 │ 40 │ 60 │
    └────┴────┴────┘

    INTEGER,DIMENSION(6)   :: vect
    INTEGER,DIMENSION(2)   :: shp
    INTEGER,DIMENSION(2,3) :: rshp
    vect=(/10, 20, 30, 40, 50, 60/)
    shp =(/2, 3/)
    rshp=RESHAPE(vect,shp)
    WRITE(*,'(3I4)') (rshp(i,:),i=1,2)

実行例
10 30 50 20 40 60

green dotサンプルプログラム2

1次元配列vectからshpで指定した2行4列の配列rshpを作成する。
1行目からデータを代入するためのORDERを指定し、作成する配列要素に代入する 値PADの指定をする。内容は以下の通りとする。
      +----+----+----+----+----+----+
 vect | 10 | 20 | 30 | 40 | 50 | 60 |
      +----+----+----+----+----+----+
      +----+----+      +----+----+     +----+----+
 shp  |  2 |  4 |  pad | 22 | 44 | ord |  2 |  1 |
      +----+----+      +----+----+     +----+----+
      +----+----+----+----+
 rshp | 10 | 20 | 30 | 40 |
      | 50 | 60 | 22 | 44 |
      +----+----+----+----+

    INTEGER,DIMENSION(6)   :: vect
    INTEGER,DIMENSION(2)   :: shp, pad, ord
    INTEGER,DIMENSION(2,4) :: rshp
    vect=(/10, 20, 30, 40, 50, 60/)
    shp =(/20, 40/); pad=(/22, 44/); ord=(/2, 1/)
    rshp=RESHAPE(vect,shp,pad,ord)
    WRITE(*,'(4I4)') (rshp(i,:),i=1,2)

実行例
10 20 30 40 50 60 22 44
line-end