Tenho os seguintes estados e matriz de transição
import numpy as np
n_states = 3
states = np.arange(n_states)
T = np.array([
[0.5, 0.5, 0],
[0.5, 0, 0.5],
[0, 0, 1]
])
Gostaria de simular n_sims
caminhos onde cada caminho consiste em n_steps
. Cada caminho começa em 0. Portanto, escrevo
n_sims = 100
n_steps = 10
paths = np.zeros((n_sims, n_steps), dtype=int)
Com a ajuda de np.random.Generator.choice
gostaria de "preencher à direita" os caminhos usando a matriz de transição. Minha tentativa parece a seguinte
rng = np.random.default_rng(seed=123)
for s in range(1, n_steps+1):
paths[:,s] = rng.choice(
a=n_states,
size=n_sim,
p=T[paths[:,s-1]]
)
Isso resulta no seguinte erro:
ValueError: p deve ser unidimensional
Como posso superar isso? Se possível, gostaria de evitar for-loops e vetorizar o código.
Se bem me lembro, seu processo é inerentemente iterativo, então você não se beneficiará muito da vetorização do numpy.
Talvez você queira considerar usar python puro:
Exemplo de saída: