Functions/ind_resolve - NCL tips

indで得られるようなインデックスの1次元配列を多次元の表現に変える関数

id_nd = 関数名(id_1d, dimsize)

〔入力変数〕

id_1d

整数型の1次元配列(本来は多次元配列からndtoonedindを用いてつくられたものだろう)。

dimsize

id_1dを多次元配列のインデックスに対応させるとき,その配列の次元の大きさからなる整数型の1次元配列。例えば,大きさが[2]x[2]x[4]の3次元配列の場合には,dimsize = (/2, 2, 4/)となる。

〔出力変数〕

id_nd

dimsizeで指定した次元とその大きさを持つ配列上でのインデックスが入った配列。id_1dの長さがM,dimsizeの長さがNならば,id_ndは[M]x[N]の配列となる。


つまり,この関数を使う一つの状況としては,ある多次元配列にindのようなものを適用したいがindは1次元配列にしか対応しないために,一度ndtoonedで1次元配列に変換してからindを用い,その結果をもとの多次元配列上での場所を指定するインデックスに変換したい場面である。
例えば,[2]x[2]x[4]の配列である

a = (/ (/ (/1,2,3,4/), (/5,6,7,8/) /), (/ (/9,10,9,8/), (/7,6,5,4/) /) /)

のうち,5よりも大きな要素に対応する場所が欲しいとする。このとき,5よりも大きな要素は,(0,1,1),(0,1,2),(0,1,3),(1,0,0),(1,0,1),(1,0,2),(1,0,3),(1,1,0),(1,1,1)にある9要素である。したがって,

id_nd = ind_resolve( ind(ndtooned(a).gt.5), dimsizes(a))

とすると,id_ndは[9]x[3]の配列で,id_nd = (/ (/0,1,1/),(/0,1,2/),(/0,1,3/),(/1,0,0/),(/1,0,1/),(/1,0,2/),(/1,0,3/),(/1,1,0/),(/1,1,1/) /) である。


トップ   編集 凍結 添付 名前変更   新規