[python] numpyのhstack(np.r_)が遅いので逐次出力で高速化
np.c_(np.hstack)やnp.r_(np.vstack)が遅かったので対処メモ。
例えば、outという配列に、同じ列数のnumpy arrayもしくはint(Error時用)が詰まっているとして、
import numpy as npとするとむちゃくちゃ遅いが、最初から(Errorでない場合の)列の数がNだとわかっていれば、一度バイナリに文字列として出力して整形した方がぐっと早くなった(データの大きさや環境にもよるが1日→数時間くらい)。
...
flag=0
outdata=None
for data in out:
if type(data) is int:
continue
if flag==0:
outdata=data
flag=1
else:
outdata=np.r_[outdata, data]
np.save(outf, outdata)
大量のデータを扱う場合は後者を試してみると良いかもしれない。import numpy as npimport os...with open(outf, mode='wb') as ff:
for p in out:
if type(p) is not int:
for pp in p:
ff.write('\n'.join(pp.astype("str").tolist()))
ff.write('\n')
with open(outf) as ff:
data=ff.read()
data=np.array(data.splitlines()).astype(float)
outdata=data.reshape(data.size/N, N)
np.save(outf, outdata)
os.remove(outf)
コメント
コメントを投稿