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

How do I add an attribute name to an array?

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

当我做的时候

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 有一些魔力,可以让我们像 errors1 这样的节点操作,就好像它们是 numpy 数组一样,但它并不总是像您预期的那样工作。在这种情况下,您可以使用 pm.Lambda 显式定义确定性节点,​​例如

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

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

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