DaskArrayを使用する場合は、通常dask.array
で提供される関数を使用することをお勧めします。 NumPy関数を直接使用する際の問題は、データをDask Arrayからメモリにプルすることです。これは経験したシェルフリーズの原因となる可能性があります。 dask.array
で提供されている関数は、それらを評価したいと思うまで、遅れて連鎖することによってこれを避けるように設計されています。この場合、np.exp
の代わりにda.exp
を使用する方がよいでしょう。以下に例を示します。
これがどのように行われるかを示すコードの変更版を提供しました。この例では、.compute()
を呼び出しています。この結果、完全な結果がメモリに取り込まれます。データが非常に大きい場合には、これによって問題が発生する可能性もあります。したがって、計算結果を小さくしてメモリに使いやすいようにする前に、データの小さなスライスを取ることを実証しました。データが大量であり、完全な結果を保持したい場合は、代わりにディスクに格納することをお勧めします。
これが役に立ちます。
In [1]: import dask.array as da
In [2]: def sigmoid(z):
...: return 1/(1 + da.exp(-z))
...:
In [3]: d = da.random.uniform(-6, 6, (100, 110), chunks=(10, 11))
In [4]: ds = sigmoid(d)
In [5]: ds[:5, :6].compute()
Out[5]:
array([[ 0.0067856 , 0.31701817, 0.43301395, 0.23188129, 0.01530903,
0.34420555],
[ 0.24473798, 0.99594466, 0.9942868 , 0.9947099 , 0.98266004,
0.99717379],
[ 0.92617922, 0.17548207, 0.98363658, 0.01764361, 0.74843615,
0.04628735],
[ 0.99155315, 0.99447542, 0.99483032, 0.00380505, 0.0435369 ,
0.01208241],
[ 0.99640952, 0.99703901, 0.69332886, 0.97541982, 0.05356214,
0.1869447 ]])