Ускорение процедуры проверки равенства двух переменных - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь реализовать процесс принятия решений Маркова в Python и у меня возникают некоторые проблемы со скоростью при выполнении следующего кода (что неудивительно ...):

def p(j, state, action):
    if (np.linalg.norm(j[0,:]-np.array([-100,-100]))>0.1 and np.linalg.norm(state[0,:]-state[1,:])<0.1):
        return 0
    elif (np.linalg.norm(j[0,:]-np.array([100,100]))>0.1 and np.linalg.norm(state[0,:]-np.array([5,1]))<0.1):
        return 0
    elif (np.linalg.norm(j[0,:]-np.array([100,100]))<0.1 and np.linalg.norm(state[0,:]-np.array([5,1]))<0.1):
        return 1
    else: ....... (here other stuff follows but this isnt the issue)

Функция должна дать мневероятность того, что я нахожусь в состоянии (state), для перехода в состояние (j) с использованием входа (action), который он делает правильно, но медленно.

В настоящее время мне нужно дважды зациклить переменные j и state, которые являются массивами 2 на 2.В идеале я бы смог выяснить, как написать такую ​​функцию, которая вводит массивы NOSTATES x 2 x 2, где NOSTATES - число состояний.

Я думаю, мне следует попытаться векторизовать мой код, но, к сожалению,Я не уверен, как реализовать проверки на равенство.

Любая помощь будет принята с благодарностью!

РЕДАКТИРОВАТЬ: Типичный ввод для p() будет:

j=np.array([[1,1],[3,3]]) state =np.array([[1,2],[2,3]]) action = [0,1]
...