这可能是一个愚蠢的问题.
我正在尝试使用PyMC中的MCMC评估将数据拟合到一个非常奇怪的PDF中.对于这个例子,我只想弄清楚如何适应正常分布,我手动输入普通PDF.我的代码是:
data = [];
for count in range(1000): data.append(random.gauss(-200,15));
mean = mc.Uniform('mean', lower=min(data), upper=max(data))
std_dev = mc.Uniform('std_dev', lower=0, upper=50)
# @mc.potential
# def density(x = data, mu = mean, sigma = std_dev):
# return (1./(sigma*np.sqrt(2*np.pi))*np.exp(-((x-mu)**2/(2*sigma**2))))
mc.Normal('process', mu=mean, tau=1./std_dev**2, value=data, observed=True)
model = mc.MCMC([mean,std_dev])
model.sample(iter=5000)
print "!"
print(model.stats()['mean']['mean'])
print(model.stats()['std_dev']['mean'])
Run Code Online (Sandbox Code Playgroud)
我发现的例子都使用了像mc.Normal,或者mc.Poisson或者诸如此类的东西,但是我想要符合注释掉的密度函数.
任何帮助,将不胜感激.
总而言之,当我尝试从功能性 numpy 数组创建它们时,DataFrame 会吐出字节序错误。这是一个 pastebin,更多详细信息如下:http : //pastebin.com/Sdg9EM61
在我的领域,我们以 .FIT 格式存储数据,这是一种二进制格式(这可能是有用的信息)
我真的不知道如何解决以下几行代码和错误。
d = fits.getdata('file.fit')
d2 = np.array(d)
Run Code Online (Sandbox Code Playgroud)
然后你可以做一些很酷的技巧,比如:
d2[d2['key1'] > 10.]
d2[['key1', 'key2']]
Run Code Online (Sandbox Code Playgroud)
等等。
当我将其转换为 Pandas DataFrame 时
d3 = pandas.DataFrame(d2)
Run Code Online (Sandbox Code Playgroud)
事情开始变得奇怪。列名称已更改,例如:
d3.columns
Run Code Online (Sandbox Code Playgroud)
返回
Index([u'key1', u'key2'], dtype='object')
Run Code Online (Sandbox Code Playgroud)
在每个列名前面加上这个新的 u,而不是
d2.dtype
Run Code Online (Sandbox Code Playgroud)
回来
dtype([('key1', '>i4'), ('key2', 'S19')])
Run Code Online (Sandbox Code Playgroud)
虽然当您使用 d3.dtypes 而不是 d3.columns 时,数据类型在数据框中看起来不错......
无论如何,DataFrame 拥有所有数据并保留数据类型,我可以打印出特征数据等,但是一旦我尝试执行以下操作:
d3[d3['key1'] > 10.]
Run Code Online (Sandbox Code Playgroud)
我收到一个关于字节序的怪物错误:
ValueError: Big-endian buffer not supported on little-endian compiler
Run Code Online (Sandbox Code Playgroud)
关于这意味着什么以及如何解决的任何见解?