Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python函数中迭代方程式,每次迭代都使用前面的结果_Python_Function_For Loop_Range_Bayesian - Fatal编程技术网

如何在python函数中迭代方程式,每次迭代都使用前面的结果

如何在python函数中迭代方程式,每次迭代都使用前面的结果,python,function,for-loop,range,bayesian,Python,Function,For Loop,Range,Bayesian,我试图在python中创建一个函数来计算贝叶斯概率,而不使用scipy,虽然我可以让函数打印一个结果,但我很难让它重复多次,在下一次计算中使用上一个结果 以下是我目前掌握的情况: def prob_given_positive (prior, false_positive_rate, true_positive_rate): pdgp = (true_positive_rate * prior) / (false_positive_rate) for i in range(10):

我试图在python中创建一个函数来计算贝叶斯概率,而不使用scipy,虽然我可以让函数打印一个结果,但我很难让它重复多次,在下一次计算中使用上一个结果

以下是我目前掌握的情况:

def prob_given_positive (prior, false_positive_rate, true_positive_rate):
  pdgp = (true_positive_rate * prior) / (false_positive_rate)
  for i in range(10):
    probability = (true_positive_rate * pdgp) / (false_positive_rate)
    print (probability)

prob_given_positive(.001,.08,1)
这是我得到的打印件

0.15625
0.15625
0.15625
0.15625
0.15625
0.15625
0.15625
0.15625
0.15625
0.15625
我想要的是10种不同的概率,每次都用之前计算的“概率”或“pdgp”替换“先前的”


关于我缺少什么的指导?

我不喜欢说“疯狂就是一遍又一遍地做同样的事情,期待不同的结果”,但即使不是疯狂,也是糟糕的编程。从for循环的一次迭代到另一次迭代没有任何变化,那么为什么期望不同的输出呢

在下一次计算中使用上一个结果

您认为您在哪里告诉Python您在下一次计算中使用的是上一个结果

如果您希望将迭代的输出作为下一次的输入,那么您需要将输出分配给某个对象。例如(不保证这是您想要的正确代码,只是一个示例,其中一个迭代的输出被用作下一个迭代的输入):


您还可以查看是否存在第n次迭代贝叶斯更新的封闭式公式。

好吧,您想要的是
概率的前一个值
成为
概率的下一个值
,因此最简单的事情就是完全去掉该变量,只需始终使用
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
与右侧的不同,这就是为什么它可以工作的原因。带有
=
的表达式的右侧是对计算机的指令,用于生成新值,然后分配给左侧

实际上,它可以进一步简化——第二行中的长方程与loo中的方程基本相同——只是前者被后者所取代。因此,您可以改为:

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)
这使用了一个叫做“不要重复你自己”或“干燥”的原则——这样主公式只出现一次

但还要注意,函数不会返回任何内容。您可能希望在创建值时将其存储在列表中,并返回:

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))

我确实同意这些答案,但我不确定基于可能的先前“先验”不断获得新概率的“变量”因素是什么

这有点模棱两可,但假设你的“假阳性率”和“真阳性率”是一致的,变量变化是“优先的”,你可以这样做,顺便说一句,我认为其他答案做得很好,可能还有很多其他方法可以做到这一点:

def prob_given(pdgp=None, false_positive_rate=None, true_positive_rate=None):
  getallprobs = []
  for newpdgp in pdgp:
    probability = (true_positive_rate * newpdgp) / (false_positive_rate)
    getallprobs.append(probability)

  return getallprobs

def usePrevPdgp(prior,false_positive_rate, true_positive_rate):
  storePdgps = []
  while True:
   for i in range(10):
     prior += prior
     pdgp = (true_positive_rate * prior) / (false_positive_rate)
     storePdgps.append(pdgp)

   latestpdgp = [i for i in storePdgps]
   return latestpdgp

if __name__ == "__main__":
   newPdgp = usePrevPdgp(.001,.08,1)
   getNewProb = prob_given(newPdgp, .08, 1)
   print(getNewProb)

您在for循环中声明了一个变量i,但从未在主体中使用它。在迭代过程中,其他变量实际上都没有修改,因此输出保持不变
def prob_given(pdgp=None, false_positive_rate=None, true_positive_rate=None):
  getallprobs = []
  for newpdgp in pdgp:
    probability = (true_positive_rate * newpdgp) / (false_positive_rate)
    getallprobs.append(probability)

  return getallprobs

def usePrevPdgp(prior,false_positive_rate, true_positive_rate):
  storePdgps = []
  while True:
   for i in range(10):
     prior += prior
     pdgp = (true_positive_rate * prior) / (false_positive_rate)
     storePdgps.append(pdgp)

   latestpdgp = [i for i in storePdgps]
   return latestpdgp

if __name__ == "__main__":
   newPdgp = usePrevPdgp(.001,.08,1)
   getNewProb = prob_given(newPdgp, .08, 1)
   print(getNewProb)