2014-09-04 4 views
0

После отсюда: Conditional calculation in pythonЗначение ошибки: значение истинности неоднозначной

Я редактирует эту строку:

out = log(sum(exp(a - a_max), axis=0)) 

от линии 85 здесь: https://github.com/scipy/scipy/blob/v0.14.0/scipy/misc/common.py#L18

к этому:

out = log(sum(exp(threshold if a - a_max < threshold else a - a_max), axis = 0)) 

Но я получаю следующее сообщение об ошибке:

out = log(sum(exp(threshold if a - a_max < threshold else a - a_max), axis=0)) ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Я могу видеть из this ответа, что ошибка может быть исправлена ​​с помощью для цикла, чтобы пройти через каждое значение ... но есть ли способ, чтобы включить его в более быстрый код? Мои массивы имеют десятки тысяч элементов.

ответ

2

Это выражение

threshold if a - a_max < threshold else a - a_max 

такое же, как max(a - a_max, threshold). Если a является массивом numpy, то это также выражение a - a_max < threshold. Вы не можете использовать массив numpy в качестве условного выражения в тернарном операторе Python if-else, но вы можете вычислить поэтапно максимум с помощью np.maximum. Таким образом, вы должны быть в состоянии заменить это выражение с

np.maximum(a - a_max, threshold) 

(npnumpy это.)

+0

Теперь я получаю эту ошибку: 'из = лог (сумма (ехр (np.minimum (а - a_max, порог)), ось = 0)) TypeError: sum() не принимает аргументов ключевого слова' – user961627

+0

Вы должны использовать функции numpy: 'np.log',' np.sum' и 'np.exp'. –

Смежные вопросы