2016-03-26 10 views
2

Ich habe zwei DASK-Arrays, d. H. A und b. Ich bekomme Punktprodukt von a und b, wie untenArray-Operationen auf DASK-Arrays

>>>z2 = da.from_array(a.dot(b),chunks=1) 
>>> z2 
dask.array<from-ar..., shape=(3, 3), dtype=int32, chunksize=(1, 1)> 

Aber wenn ich das tue

sigmoid(z2) 

Shell nicht mehr funktioniert. Ich kann es nicht einmal töten. Sigmoid wird wie unten angegeben:

def sigmoid(z): 
     return 1/(1+np.exp(-z)) 

Antwort

2

Wenn mit Dask Arrays arbeiten, ist es normalerweise am besten Funktionen in dask.array zu nutzen. Das Problem bei der direkten Verwendung von NumPy-Funktionen besteht darin, dass sie die Daten aus dem Dask Array in den Speicher ziehen, was die Ursache für das Einfrieren der Shell sein könnte. Die Funktionen, die in dask.array zur Verfügung gestellt werden, sollen dies vermeiden, indem Sie Berechnungen so lange verketten, bis Sie sie auswerten möchten. In diesem Fall wäre es besser, da.exp anstelle von np.exp zu verwenden. Hier ein Beispiel dafür.

Haben Sie eine modifizierte Version Ihres Codes bereitgestellt, um zu demonstrieren, wie dies geschehen würde. Im Beispiel habe ich .compute() aufgerufen, die auch das volle Ergebnis in den Speicher zieht. Es ist möglich, dass dies auch Probleme für Sie verursachen kann, wenn Ihre Daten sehr groß sind. Daher habe ich demonstriert, dass ich vor dem Aufruf von compute ein kleines Stück der Daten nehme, um das Ergebnis klein und speicherfreundlich zu halten. Wenn Ihre Daten groß sind und Sie das volle Ergebnis behalten möchten, empfehlen wir stattdessen, sie auf der Festplatte zu speichern.

Hoffe, das hilft.

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 ]]) 
1

Verstanden ... Ich habe versucht, und es hat funktioniert!

ans = z2.map_blocks(sigmoid)