4

私は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) でも同じ問題が発生することを確認できます。

4

0 に答える 0