* generate a function with axis= option

多次元配列の任意次元に演算を行いたい場合は多い.これはpythonの標準の書き方では,関数にaxis=を引き渡すのだが,これを関数内で効率良くに扱うにはどうすればよいだろうか?

まず入力されたデータについて,演算をするべき軸が引数axisで特定されていると仮定するしよう.この場合,以下の操作で,常に演算を行う軸をaxis=1に変更できる.

szs=list(data_in.shape)

sz0=int(np.prod(szs[:axis]))

sz1=int(szs[axis])

sz2=int(np.prod(szs[axis+1:]))

data_in=data_in.reshape([sz0,sz1,sz2])

を行うことで,data_inを3次元配列[sz0, sz1, sz2]にして,かつ演算を行う配列をaxis=1に固定できる.この後で演算をaxis=1について実行する.その結果作成される出力データをdata_outとしよう.通常,このdata_outも3次元配列[sz0, sz1_out, sz2]となるべきである.したがって出力データを次のようにreshapeすれば

szs_out=szs.copy()

szs_out[axis]=sz1_out

data_out=data_out.reshape(szs_out)

入力データと同じ次元の配列で,そのaxis軸に演算が施されて結果が格納される.

ただしこの方法では演算を行う軸が常にaxis=1になるので,axis=0にしか定義されていない演算を利用する場合にはコーディングがやや複雑になるという欠点がある.そういった場合には,この方法をとるべきかどうかを適宜判断するべきだろう.