私はpymcを初めて使用し、楽しんでいますが、非常に奇妙な動作に遭遇しました。動いているものを追跡するために使用したい。チュートリアルに従って、いくつかの確率論を設定し、それを使用しようとしpymc.NormApprox()
ました。fit()
実行されているようですが、出力を取得しようとすると、KeyError
. 使用に切り替えると、pymc.MCMC
`sample() OK が実行されますが、名前空間が破棄されます (Python は exit() の方法さえ忘れてしまいます)。
システム: Ubuntu 12.04、scipy numpy などをインストール、pymc を easy_install 経由でインストール。gitからも試しました。
再現するコード: test.py::
import pymc
import numpy as np
x = pymc.MvNormal('x',mu=np.zeros(4),tau=np.eye(4))
@pymc.deterministic()
def y(x=x):
out = np.zeros(2)
out[0] = x[0]+x[2]
out[1] = x[1]+x[3]
return out
ymeas = pymc.MvNormal('ymeas',mu=y,tau=np.eye(2)*100000,value=20*np.ones(2),observed=True)
次に、python または ipython: を実行しているシェルで:
import test
import pymc
foo = pymc.NormApprox(test)
foo.fit()
foo.mu[foo.x] # Fails - gives KeyError
foo._mu # I can see it OK if I break privacy rules
foo = pymc.MCMC(test)
foo.sample(10000) # runs OK
foo # fails - namespace is nuked
私が期待するもの:
foo.mu[foo.x]
後部に近い法線を教えてくれるはずです。キーエラーが発生するべきではなく、侵入する必要もありませんfoo._mu
代わりに私は得る:
>>> foo.mu[foo.x]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/pymc-2.2-py2.7-linux-x86_64.egg/pymc/NormalApproximation.py", line 56, in __getitem__
tot_len += self.owner.stochastic_len[p]
KeyError: 9.9999517411499177
>>> foo._mu
array([ 9.99995174, 9.99997163, 10.0000485 , 10.00002837])
>>>
また、docstring forfoo.mu
は言うN.mu(p1,p2)
が、オンライン ドキュメントにはN.mu[N.p1,N.p2]
.
MCMC 後の名前空間のメルトダウンに関しては、exit() の方法さえ忘れています。
また、別のインストール (Enthought Python) を実行している別のマシン (MacBook Pro) でも同じ問題が発生することを確認できます。