idata = az.convert_to_inference_data(np.expand_dims(samples, 0))
# or what is the same (we just choose the name of the variable)
idata = az.from_dict({"position": np.expand_dims(samples, 0)})
它将生成一个(1, N, 2)数组,ArviZ将理解该数组的维度。我已经添加了对InferenceData的转换,因为使用InferenceData将允许您调用任何ArviZ函数,而无需再关心维度
使用阵列时,ArviZ采用以下形状约定:
(draw,)
(chain, draw)
(chain, draw, *shape)
我不确定为什么2d案例对您不起作用,我怀疑可能是因为没有足够的绘图来计算
ess
为了确保您的维度被正确解释,我建议执行^{} ,然后检查
idata.posterior
以查看生成对象的维度。然后可以调用az.ess(idata)
以获取有效样本量编辑:如果我正确理解了您的评论,您将生成一个具有形状
(draw=N, parameter_dim=2)
的数组,因为您仅对单个链进行采样。由于这是一个2d数组,它将被解释为具有N
链和2
绘图,这将打印一条关于链多于绘图的警告。您可以通过以下方式重塑阵列以匹配ArviZ约定:它将生成一个
(1, N, 2)
数组,ArviZ将理解该数组的维度。我已经添加了对InferenceData
的转换,因为使用InferenceData
将允许您调用任何ArviZ函数,而无需再关心维度如果数组为
(2, N)
,则在扩展轴之前添加转置应该可以解决问题:相关问题 更多 >
编程相关推荐