小编Pat*_*ens的帖子

Lambda 函数未返回正确的值

我正在尝试制作 Gillespie 算法的变体,并确定反应倾向,我正在尝试使用 lambda 表达式自动生成倾向向量。然而,当创建 SSA.P 时,一切都出错了。代码块中的最后一个循环 PROPLOOP 返回两个倾向,其中使用 P_alternative 生成​​的倾向是正确的倾向。问题是:如何获得 SSA.P 与 SSA.P_alternative 相同的值?

import numpy as np
from numpy.random import uniform
class Markov:
  def __init__(self,z0,t0,tf,rates,stoich):
    self.S=stoich

    self.z0=z0
    self.rates=rates

    self.P=self.propensities()
    self.P_alternative=[
      lambda z,rate:(0.5*rate[0]*z[0]*(z[0]-1)),
      lambda z,rate:rate[1]*np.prod(z[0]),
      lambda z,rate:rate[2]*np.prod(z[1]),
      lambda z,rate:rate[3]*np.prod(z[1]),
      lambda z,rate:rate[4]*np.prod(z[np.array([0,1])]),
      lambda z,rate:rate[5]]

    self.t0=t0
    self.tf=tf


  def propensities(self):
    prop=[]
    for i,reac in enumerate(self.S.T):
      if all(z>=0 for z in reac):
        prop.append(lambda z,rate:rate[i])

      if any(z==-1 for z in reac):
        j=np.where(reac==-1)[0]
        prop.append(lambda z,rate:rate[i]*np.prod(z[j]))

      if any(z==-2 for z in reac):
        j=np.where(reac==-2)[0][0]
        prop.append(lambda z,rate:(0.5*rate[i]*z[j]*(z[j]-1))[0])

    return …
Run Code Online (Sandbox Code Playgroud)

python lambda numpy

4
推荐指数
1
解决办法
862
查看次数

标签 统计

lambda ×1

numpy ×1

python ×1