私はいくつかの非常に大きな配列を扱っています。もちろん、私が対処している問題は、作業する RAM が不足していることですが、その前でもコードの実行が遅くなるため、RAM が無限にあったとしても、まだ時間がかかりすぎます。私がやろうとしていることを示すために、コードを少し示します。
#samplez is a 3 million element 1-D array
#zfit is a 10,000 x 500 2-D array
b = np.arange((len(zfit))
for x in samplez:
a = x-zfit
mask = np.ma.masked_array(a)
mask[a <= 0] = np.ma.masked
index = mask.argmin(axis=1)
# These past 4 lines give me an index array of the smallest positive number
# in x - zift
d = zfit[b,index]
e = zfit[b,index+1]
f = (x-d)/(e-d)
# f is the calculation I am after
if x == samplez[0]:
g = f
index_stack = index
else:
g = np.vstack((g,f))
index_stack = np.vstack((index_stack,index))
それぞれ 300 万 x 10,000 の 2 次元配列である g と index_stack をさらに計算する必要があります。このループの各反復にはほぼ 1 秒かかるため、合計で 300 万秒かかります。これは長すぎます。
この計算をより速く実行するためにできることはありますか? この for ループなしでどうすればよいか考えてみましたが、想像できる唯一の方法は zfit の 300 万個のコピーを作成することであり、これは実行不可能です。
そして、すべてをRAMに保持しないことで、これらの配列を操作できる方法はありますか? 私は初心者で、これについて検索したことはすべて無関係であるか、理解できないものです。前もって感謝します。