2017-02-18 4 views
1

У меня есть следующий питон коды подводить массив с условием в другом массивесумма массив с условием в другом массиве с NumPy

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

Я считаю, NumPy эквивалента будет np.where(lower_bounds>0, histo1,0).sum() Но метод NumPy складывает все в histo1 (игнорируя требование, чтобы lower_bounds> 0). Зачем? Или есть другой способ сделать это? Благодарю.

+4

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

ответ

0

Хорошо, это правда, догадки, но единственное объяснение, которое я могу придумать для np.where(lower_bounds>0, histo1,0).sum() возвращения полной суммы является

  • вы на python2
  • lower_bounds является список, а не массив

на python2:

[1, 2] > 0 
True 

значение что ваша numpy-линия будет транслировать свой первый аргумент и всегда выбирает из histo1, а не из 0. Обратите внимание, что альтернативная формулировка, предложенная в комментариях histo1[lower_bounds>0].sum(), также не будет работать (в этой ситуации она вернет histo1[1]).

Решение. Явно конвертировать нижние_бары в массив

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

КПП. на Python3 вы получите исключение

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

Вы были правы (о Python 2 и списка)! Как новичок в Python, я не был дисциплиной в структурах данных. Благодарю. –