Python 如何将属性名称添加到数组中?

Python 如何将属性名称添加到数组中?,python,numpy,pymc,Python,Numpy,Pymc,我想知道如何向数组添加属性 当我这样做的时候 errors1 = pm.Uniform('errors', 0, 100, size = 7) 将添加名称“errors” 但当我这么做的时候 errors2 = [errors1[1], errors1[3], errors1[6]] 我不知道如何添加这个名称,因为我没有添加它,当我尝试创建一个带有errors2的模型时,我得到一个错误,说它没有属性名称 以下是我的完整代码: import pymc as pm from matplotli

我想知道如何向数组添加属性

当我这样做的时候

errors1 = pm.Uniform('errors', 0, 100, size = 7)
将添加名称“errors”

但当我这么做的时候

 errors2 = [errors1[1], errors1[3], errors1[6]]
我不知道如何添加这个名称,因为我没有添加它,当我尝试创建一个带有errors2的模型时,我得到一个错误,说它没有属性名称

以下是我的完整代码:

import pymc as pm
from matplotlib import pyplot as plt
from pymc.Matplot import plot as mcplot
import numpy as np
from matplotlib import rc

first_res = [-27.020,3.570,8.191,9.898,9.603,9.945,10.056]
second_res = [18.752, 12.450, 11.832]

v1 = pm.Uniform('v1', -30, 15)
v2 = pm.Uniform('v2', 0, 20)

errors1 = pm.Uniform('errors', 0, 100, size = 7)
errors2 = [errors1[1], errors1[3], errors1[6]] # doesn't have an attribute name

taus1 = 1/(errors1 ** 2)
taus2 = [taus1[1], taus1[3], taus1[6]]

first_dist = pm.Normal('first_dist', mu = v1, tau = taus1, value = first_res, observed = True)
second_dist= pm.Normal('second_dist', mu = v2, tau = taus2, value = second_res, observed = True)

model=pm.Model([first_dist, second_dist, errors1, taus1, v1, v2])
mcmc=pm.MCMC(model)
mcmc.sample(20000,10000)

mcplot(mcmc.trace("errors"))

plt.figure() 

model2=pm.Model([second_dist, errors2, taus2, v2]) # since errors2 doesn't have an attribute name, I get an error
mcmc2=pm.MCMC(model2)
mcmc2.sample(20000,10000)

mcplot(mcmc2.trace('second_dist'))

PyMC2
具有一些魔力,可以让我们像操作numpy数组一样在
errors1
这样的节点上操作,但它并不总是像您预期的那样工作。在这种情况下,您可以使用
pm.Lambda
显式定义确定性节点,例如

errors2 = pm.Lambda('errors2', lambda errors1=errors1: [errors1[1],
                                                        errors1[3], 
                                                        errors1[6]])

为了澄清一些python概念,您定义
errors2
的方式是python列表。列表没有任何名称属性。包含列表元素的属性与整个列表(作为对象)的属性不同。 事实上,数组也没有任何name属性,如果
errors1
确实有name属性,那是因为它是pymc对象,一个分布


我认为您必须更详细地定义
错误2
。是均匀分布吗?它与errors1的关系是什么,不是python,而是统计上的?

谢谢,但我仍然收到一个错误,说“TypeError:hasattr():属性名必须是字符串”,也许errors2不是问题。这是一个为我运行的笔记本(模收敛问题):这对你有用吗?实际上,没关系,我刚刚写了两个独立的程序。但是你的答案回答了所有问题,所以我将投票并接受。你知道如何从我的代码中输出第一距离和第二距离吗?因为观察到了
first\u dist
,所以它没有任何痕迹。我想,您可以访问
第一距离值
第一距离logp