Выберите запись, которая удовлетворяет условию - PullRequest
0 голосов
/ 06 декабря 2018

Я использую numPy и имею следующую структуру:

self.P = np.zeros((self.nS, self.nA, self.nS))

Один из примеров этой структуры может быть, например:

Pl = np.zeros((7,2,7))
Pl[0,0,1]=1
Pl[1,0,2]=1
Pl[2,0,3]=1
Pl[3,0,4]=1
Pl[4,0,5]=1
Pl[5,0,6]=0.9
Pl[5,0,5]=0.1
Pl[6,0,6]=1
Pl[0,1,0]=1
Pl[1,1,1]=0
Pl[1,1,0]=1
Pl[2,1,1]=1
Pl[3,1,2]=1
Pl[4,1,3]=1
Pl[5,1,4]=1
Pl[6,1,5]=1

Теперь я хочу сделать следующее:учитывая число e, выберите одну запись, где назначенное значение равно

. Другое условие состоит в том, что я знаю первую запись (nS или x в примере), но две другие могутменяются.

Я пытался реализовать это следующим образом:

self.P[self.P[x,:,:] < e]

Но это дает мне такую ​​ошибку:

IndexError: boolean index did not match indexed array along dimension 0; dimension is 7 but corresponding boolean dimension is 2

Любая помощь действительно приветствуется.

1 Ответ

0 голосов
/ 06 декабря 2018

Проблема с вашей текущей попыткой заключается в том, что при индексировании массива весь используется логическая маска, размер которой равен только размеру выбранного среза, в результате чего получается IndexError.

Проверьте фигуры для себя:

>>> Pl.shape
(7, 2, 7)
>>> x = 2
>>> (Pl[x] < 5).shape
(2, 7)
>>> Pl[Pl[x] < 5]
IndexError: boolean index did not match indexed array along dimension 0; dimension is 7
but corresponding boolean dimension is 2

Вместо этого вы хотите применить свою логическую маску только к выбранному вами размеру:

print(Pl[x])

array([[0., 0., 0., 1., 0., 0., 0.],
       [0., 1., 0., 0., 0., 0., 0.]])

e = 0.5
Pl[x, Pl[x] < e]

array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...