4

私はいくつかの非常に大きな配列を扱っています。もちろん、私が対処している問題は、作業する 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に保持しないことで、これらの配列を操作できる方法はありますか? 私は初心者で、これについて検索したことはすべて無関係であるか、理解できないものです。前もって感謝します。

4

1 に答える 1