2016-09-01 3 views
3

Ich weiß, dass in numpy kann ich das elementweise Minimum von zwei Vektoren mitElement weise mindestens mehrere Vektoren in numpy

numpy.minimum(v1, v2) 

Was berechnen, wenn ich eine Liste von Vektoren gleicher Dimension, V = [v1, v2, v3, v4] (aber eine Liste, kein Array)? Unter numpy.minimum(*V) funktioniert nicht. Was ist die bevorzugte Sache, stattdessen zu tun?

Antwort

4

*V funktioniert, wenn V nur 2 Arrays hat. np.minimum ist ein ufunc und benötigt 2 Argumente.

Als ufunc hat es eine .reduce Methode, so kann es wiederholt auf eine Liste Eingaben gelten.

In [321]: np.minimum.reduce([np.arange(3), np.arange(2,-1,-1), np.ones((3,))]) 
Out[321]: array([ 0., 1., 0.]) 

Ich vermute, der np.min Ansatz ist schneller, aber das auf dem Array und Listengröße abhängen könnte.

In [323]: np.array([np.arange(3), np.arange(2,-1,-1), np.ones((3,))]).min(axis=0) 
Out[323]: array([ 0., 1., 0.]) 

The ufunc hat auch eine accumulate, die uns die Ergebnisse jeder Stufe der Reduktion zeigen. Hier ist es nicht zu interessant, aber ich könnte die Eingaben ändern, um das zu ändern.

In [325]: np.minimum.accumulate([np.arange(3), np.arange(2,-1,-1), np.ones((3,))]) 
    ...: 
Out[325]: 
array([[ 0., 1., 2.], 
     [ 0., 1., 0.], 
     [ 0., 1., 0.]]) 
4

Konvertieren zu NumPy Array und führen ndarray.min entlang der ersten Achse -

np.asarray(V).min(0) 

Oder einfach np.amin wie unter den Hauben verwenden, wird die Eingabe in ein Array konvertieren, bevor die minimale entlang dieser Achse zu finden -

np.amin(V,axis=0) 

Probelauf -

In [52]: v1 = [2,5] 

In [53]: v2 = [4,5] 

In [54]: v3 = [4,4] 

In [55]: v4 = [1,4] 

In [56]: V = [v1, v2, v3, v4] 

In [57]: np.asarray(V).min(0) 
Out[57]: array([1, 4]) 

In [58]: np.amin(V,axis=0) 
Out[58]: array([1, 4]) 

Wenn Sie die endgültige Ausgabe als Liste benötigen, hängen Sie die Ausgabe an .tolist() an.

Verwandte Themen