2017-02-18 3 views
1

ich folgende Python-Code haben ein Array mit Zustand in einem anderen ArraySummenarray mit Zustand in einem anderen Array mit numpy

sum=0 
for i in range(grp_num): 
    if lower_bounds[i] > 0: 
     sum = sum + histo1[i] 

I numpy Äquivalent glauben zusammenzufassen wäre np.where(lower_bounds>0, histo1,0).sum() Aber die numpy Methode summiert sich alles in histo1 (ignoriert die Anforderung, dass lower_bounds> 0). Warum? Oder gibt es einen anderen Weg, dies zu tun? Vielen Dank.

+4

'HISTO1 [lower_bounds> 0] .sum()' –

Antwort

0

Ok, dann ist dies zwar Vermutungen, aber die einzige Erklärung, die ich von für Ihren np.where(lower_bounds>0, histo1,0).sum() denken kann die volle Summe zurückkehr

  • Sie auf Python2 sind
  • lower_bounds ist eine Liste, kein Array

auf Python2:

[1, 2] > 0 
True 

Bedeutung dass Ihre numpy Zeile das erste Argument ausstrahlt und immer aus histo1, niemals aus 0 auswählt. Beachten Sie, dass die alternative Formulierung, die in den Kommentaren histo1[lower_bounds>0].sum() vorgeschlagen wurde, in dieser Situation auch nicht funktioniert (es wird histo1[1] zurückgegeben).

Die Lösung. Umwandeln von lower_bounds in ein Array explizit

np.where(np.array(lower_bounds)>0, histo1, 0) 

Btw. auf Python3 würden Sie eine Ausnahme

[1, 2] > 0 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: '>' not supported between instances of 'list' and 'int' 
+0

Sie haben Recht (etwa Python 2 und Liste) erhalten! Als Anfänger für Python war ich keine Disziplin in Bezug auf Datenstrukturen. Vielen Dank. –