Заполните массив numpy справа на основе предыдущего столбцаPython

Программы на Python
Anonymous
Заполните массив numpy справа на основе предыдущего столбца

Сообщение Anonymous »

У меня есть следующие состояния и матрица переходов

Код: Выделить всё

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]
])
Я хотел бы смоделировать пути n_sims, где каждый путь состоит из n_steps. Каждый путь начинается с 0. Поэтому пишу

Код: Выделить всё

n_sims = 100
n_steps = 10
paths = np.zeros((n_sims, n_steps),  dtype=int)
С помощью np.random.Generator.choice я хотел бы «заполнить вправо» пути, используя матрицу перехода.
Моя попытка: посмотрите следующим образом

Код: Выделить всё

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]]
)
Это приводит к следующей ошибке:

ValueError: p должно быть одномерным

Как мне это преодолеть? Если возможно, я хотел бы предотвратить циклы for и векторизовать код.

Подробнее здесь: https://stackoverflow.com/questions/790 ... ous-column

Вернуться в «Python»