2016-04-11 4 views
0

Ich habe eine 3D-Numpy-Array A der Form 10 x 5 x 3. Ich habe auch einen Vektor B der Länge 3 (Länge der letzten Achse von A). Ich möchte jedes A[:,:,i] gegen B[i] vergleichen, wo i = 0:2 und alle Werte A[:,:,i] > B[i] durch B[i] ersetzen.Python ersetzt maximale Werte in Array

Gibt es eine Möglichkeit, dies ohne eine for-Schleife zu erreichen.

Edit: Ich habe versucht, die argmax über i = 0:2 einer for-Schleife python replace values in 2d numpy array

+1

Was Sie bisher versucht haben? – Cyrbil

Antwort

3

Sie numpy.minimum dies zu erreichen, verwenden können. Es gibt das elementweise Minimum zwischen zwei Arrays zurück. Wenn die Arrays unterschiedliche Größen haben (wie in Ihrem Fall), werden die Arrays vor dem Vergleich automatisch auf die richtige Größe übertragen.

A = numpy.random.rand(1,2,3) 
# array([[[ 0.79188 , 0.32707664, 0.18386629], 
#   [ 0.4139146 , 0.07259663, 0.47604274]]]) 

B = numpy.array([0.1, 0.2, 0.3]) 

C = numpy.minimum(A, B) 
# array([[[ 0.1  , 0.2  , 0.18386629], 
#   [ 0.1  , 0.07259663, 0.3  ]]]) 

Oder wie von @Divakar wenn Sie wollen Ersatz an Ort und Stelle tun:

numpy.minimum(A, B, out=A) 
+1

Oder 'numpy.minimum (A, B, out = A)'. – Divakar

+0

@Divakar Vielen Dank, dass Sie darauf hingewiesen haben. Ich vergesse diese Option immer! – Suever