在 pyMC3 中创建确定性变量矩阵

Creating a matrix of deterministic variables in pyMC3

我正在尝试使用 pyMC3 实现以下模型

https://imgur.com/W7byn8s

我无法定义 8x8 确定性变量矩阵。

假设我想要的二维矩阵的名称是 s

我希望 s[i, j] 等于 np.exp(-c*(w*d1[i, j] + (1-w)*d2[i, j]))

其中,

d1[i, j], d2[i, j] 是 np.arrays

c ~ Uniform(0,5)


w ~ Uniform(0,1)

我尝试了以下方法:

s = np.zeros((d1.shape[0],d1.shape[1]))

with pm.Model() as model:
    c = pm.Uniform("c", 0, 5)
    w = pm.Uniform("w", 0, 1)

    for i in range(8):
        for j in range(8):
            name_str = "s["+str(i)+","+str(j)+"]"
            s[i,j] = pm.Deterministic(name_str, tt.exp(-c*(w*d1[i,j]+(1-w)*d2[i,j])))

当我尝试 运行 时,出现错误:

ValueError: setting an array element with a sequence.

我是 pyMC3 的新手。有什么方法可以实现上面的图形化模型吗?

PyMC3 支持向量化操作,所以你应该可以直接使用

with pm.Model() as model:
    c = pm.Uniform("c", 0, 5)
    w = pm.Uniform("w", 0, 1)

    s = pm.Deterministic('s', tt.exp(-c * (w * d1 + (1 - w) * d2)))