2016-04-01 2 views
-1

Уважаемого питона StackOverflow пользователей,Python: добавление функции в цикле

Я хочу добавить гауссовую функцию в цикле, как это может быть сделано с целым с + = знаком. Но я не знаю, как переназначить значение функции в цикле.

Я пытался что-то вроде:

def gaussian(x, mu, sig): 
    return np.exp(-np.power(x - mu, 2.)/(2 * np.power(sig, 2.))) 

def f(x): 
    return 0 

for i in xdata: 
    f(x) = f(x) + gaussian(x,i,20) 

Но я получил сообщение «SyntaxError: не может назначить функционировать вызов»

Как я мог бы сделать эту работу?

Спасибо!

+0

Не уверен, что понимаете результат, который хотите, не могли бы вы привести нам пример? Или вы имели в виду: результат = 0 результат + = гауссовый (x, i, 20)? – Whitefret

+2

Замените 'f (x)' в вашем коде на 'y' и замените' def f (x): return 0' на 'y = 0'. – poke

+0

Хорошо, это работает! Тогда функция может быть определена только с буквой без упоминания переменной! – Damdamien

ответ

1

f (x) возвращает результат, так что, как вы говорите, 0 = 12, например ... Это вызовет ошибку, потому что '=' является оператором присваивания, поэтому слева от него вы должны имеют переменную (или константу для первого присваивания ...).

Так может быть, вы хотели сделать:

y = f(x) + gaussian(x,i,20) 

Но я не хочу, почему вы хотите сделать «+ =», потому что это только для переменных ... И ваша функция всегда возвращает 0 . Таким образом, вы могли бы просто сказать, а

def f(x): 
    return 0 

просто

y = 0 

, а затем, после того, как говорят в цикле

y += gaussian(x, i, 20). 

Или, если вы хотите построить кривую, вы можете использовать массив.

Существует также другая ошибка: й не определены в цикле (определяются в двух функциях, но только как местный Варс)

1
def gaussian(x, mu, sig): 
    return np.exp(-np.power(x - mu, 2.)/(2 * np.power(sig, 2.))) 

y = sum(gaussian(x, i, 20) for i in xdata) 
2

В соответствии с моим комментарием:

Replace f(x) in your code by y and replace def f(x): return 0 by y = 0 .

Вы ответили:

Ok, it works! Then a function can be defined only with a letter, without mentioning the variable!

Это не то, что происходит. Вы не определяете функцию. Желаемое использование f(x) не является функцией. Функция f вы определили делает только одну вещь:

def f (x): 
    return 0 

функция будет всегда возвращение 0. Как только функция определена так, она не может быть изменена (не заменяя ее другой функцией).

То, что вы хотите сделать, это собрать функцию результат -Но не результат f но результат gaussian. Или, на самом деле, вы хотите собрать все результаты вызовов функций gaussian и суммировать их.

Итак, вы создаете переменную, к которой вы добавляете свои результаты, что представляет собой сумму этих вызовов функций.

+0

Итак, переменная y в нашем примере зависит от другой переменной x, не так ли? Это математически функция, но не функция python. – Damdamien

+0

'y' - просто переменная; он не имеет каких-либо функциональных зависимостей. Чтобы это зависело от некоторой ценности, вам необходимо активно ее изменять. Это [императивное программирование] (https://en.wikipedia.org/wiki/Imperative_programming): Вы говорите, что переменная изменяется. – poke