Итак, вам нужно, чтобы предыдущее значение probability
стало следующим значением probability
, поэтому проще всего просто полностью избавиться от этой переменной и просто использовать pdgp
, как в:
def prob_given_positive (prior, false_positive_rate, true_positive_rate):
pdgp = (true_positive_rate * prior) / (false_positive_rate)
for i in range(10):
pdgp = (true_positive_rate * pdgp) / (false_positive_rate)
print (pdgp)
prob_given_positive(.001,.08,1)
(Предполагается, что указанная вами формула действительно верна!)
Обратите внимание, что pdgp
в левой части уравнения отличается с правой стороны - вот почему это работает. Правая часть выражения с =
является инструкцией для компьютера для создания нового значения, которое оно затем присваивает левой стороне.
На самом деле, оно может немного упростим - длинное уравнение во второй строке в основном совпадает с уравнением внутри уборной - за исключением того, что предшествующее заменяется задним. Вместо этого вы можете сделать следующее:
def prob_given_positive (prior, false_positive_rate, true_positive_rate):
pdgp = prior
for i in range(10+1):
pdgp = (true_positive_rate * pdgp) / (false_positive_rate)
print (pdgp)
При этом используется принцип, который называется «не повторяйся» или «DRY» - таким образом основная формула появляется только один раз.
Но также обратите внимание, что ваша функция ничего не возвращает . Возможно, вы захотите сохранить значения в списке по мере их создания и вернуть это:
def prob_given_positive (prior, false_positive_rate, true_positive_rate):
result = [] ## empty list
pdgp = prior
for i in range(10+1):
pdgp = (true_positive_rate * pdgp) / (false_positive_rate)
result.append(pdgp)
return(result)
print(prob_given_positive(0.001, 0.08, 1))