При работе с массивами ArviZ использует следующие правила формы:
- Массив 1d представляет отрисовки одной цепочки скалярной переменной:
(draw,)
- Массив 2d представляет собой отрисовку нескольких цепочек скалярной переменной:
(chain, draw)
- Массив 3d+ представляет собой отрисовку нескольких цепочек многомерных переменных:
(chain, draw, *shape)
Я не уверен, почему у вас не работает вариант 2d, я подозреваю, что это может быть связано с тем, что у вас недостаточно ничьих для расчета ess
.
Чтобы убедиться, что ваши измерения правильно интерпретируются, я бы рекомендовал выполнить idata = az.convert_to_inference_data(ary)
, а затем проверьте idata.posterior
, чтобы увидеть размеры сгенерированного объекта. Затем вы можете вызвать az.ess(idata)
, чтобы получить эффективный размер выборки.
EDIT: если я правильно понял ваши комментарии, вы создаете массив с формой (draw=N, parameter_dim=2)
, так как вы выбираете только одну цепочку. Поскольку это двумерный массив, он будет интерпретироваться как содержащий N
цепочек и 2
отрисовок, что должно вывести предупреждение о наличии большего количества цепочек, чем отрисовок. Вы можете изменить массив в соответствии с соглашением ArviZ с помощью:
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, не заботясь больше о размерах.
Если бы ваш массив был (2, N)
, добавление транспонирования перед расширением оси должно решить проблему:
idata = az.convert_to_inference_data(np.expand_dims(samples.T, 0))
person
OriolAbril
schedule
18.07.2020
N
отрисовки из 2 параметров, вы можете добавить измерение с[None, ...]
или сnp.expand_dims
, чтобы соответствовать соглашению, которое я объяснил ниже. - person OriolAbril   schedule 21.07.2020arviz.from_pymc3
? - person OriolAbril   schedule 21.07.2020