是否可以在python中导入带有某些参数的模块?
所有我通过平均参数是有这是不是模块初始化模块中存在的变量,还是我使用的模块中的变量。简而言之,我希望行为类似于函数,但与函数不同,我希望在调用代码中公开模块的变量。
例如a.py
:
#lists like data, count, prob_distribution are constructed from training_pool (not initialized in this file)
x = pymc.Uniform('x', lower = 0, upper = 1)
rv = [ Multinomial("rv"+str(i), count[i], prob_distribution[i], value = data[i], observed=True) for i in xrange(0, len(count)) ]
b.py
:
import a #I want some way tr pass value of training_pool
m = pymc.MCMC(a)
我希望将所有随机变量a.py
都暴露给MCMC
。我愿意面对一个更好的方法来解决我的问题,但是我也想知道是否可以在python中将参数传递给模块。
正如@otus已经回答的那样,无法将参数传递给模块。
我认为您正在关注PyMC2的一些入门示例,这些示例使用一种模式,其中模块将贝叶斯模型中节点的所有代码包装起来。这种方法非常适合入门,但是,如您所见,当您要使用各种变体运行模型时,这种方法可能会受到限制。
幸运的是,PyMC2可以根据列表或字典以及模块来创建MCMC对象。在这种情况下,我建议的是注释中建议的@ oleg-s:使用一个函数。您可以以函数结尾return locals()
来获取该模块中所有内容的字典,这是对pymc.MCMC
构造函数的适当输入。这是一个例子:
# a.py
from pymc import *
count = [10, 10] # perhaps good to put this stuff in data.py
prob_distribution = [[.5, .5], [.1, .2, .7]]
data = [[2, 8], [2, 3, 5]]
def model(training_pool):
x = Uniform('x', lower = 0, upper = 1)
rv = [ Multinomial("rv"+str(i), count[i], prob_distribution[i], value = data[i], observed=True) for i in training_pool ]
return locals()
# b.py
import pymc, a
training_pool = [0]
m = pymc.MCMC(a.model(training_pool))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句