SPREAD
copyright

green dotSPREAD

書式 SPREAD(SOURCE,DIM,NCOPIES)
機能 配列を複製して次元を付け加える。指定した次元DIMについてSOURCEを NCOPIES個分複写し、1次元だけ大きい配列を形成する。
SOURCEがスカラであるとき、結果の各要素はSOURCEに等しい値とする。
SOURCEが配列であるとき、 (r1,r2,…,rn+1)である。
結果の要素はSOURCE(r1,r2,…, rDIM-1,rDIM+1,…,rn+1)に等しい値とする。
nはSOURCEの次元数とする。
引数
SOURCE :任意の型でスカラまたは配列
DIM :整数型スカラ(1≦DIM≦n+1)
NCOPIES:整数型スカラ
戻り値 型、種別型パラメタはSOURCEと同じで、形状はn+1次元配列である。
SOURCEがスカラであるとき、結果の形状は(max(NCOPIES,0))とする。
SOURCEの値が形状(d1,d2,…,dn)である結果の形 状はSOURCE(d1,d2,…,dDIM-1,max(NCOPIES,0), dDIM,…,dn)とする。

green dotサンプルプログラム

次の1次元データaを行方向に3回複写したデータbと列方向に3回複写した データcを作成する。
  ┌───┬───┬───┬───┐
 a│ 1 │ 2 │ 3 │ 4 │
  └───┴───┴───┴───┘
  ┌───┬───┬───┬───┐   ┌───┬───┬───┐
 b│ 1 │ 2 │ 3 │ 4 │  c│ 1 │ 1 │ 1 │
  │ 1 │ 2 │ 3 │ 4 │   │ 2 │ 2 │ 2 │
  │ 1 │ 2 │ 3 │ 4 │   │ 3 │ 3 │ 3 │
  └───┴───┴───┴───┘   │ 4 │ 4 │ 4 │
                      └───┴───┴───┘

    INTEGER :: i
    INTEGER,DIMENSION(4)   :: a
    INTEGER,DIMENSION(3,4) :: b
    INTEGER,DIMENSION(4,3) :: c
    a=(/1,2,3,4/)
    b=SPREAD(a,1,3)
    WRITE(*,'(4I2)') (b(i,:),i=1,3)
    WRITE(*,*) '--------'
    c=SPREAD(a,2,3)
    WRITE(*,'(3I2)') (c(i,:),i=1,4)

実行例
1 2 3 4 1 2 3 4 1 2 3 4 -------- 1 1 1 2 2 2 3 3 3 4 4 4
line-end