Я использую 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 выберите одну запись, где назначенное значение <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
Любая помощь действительно ценится.
Проблема с вашей текущей попыткой заключается в том, что вы индексируете весь массив с помощью булевой маски, которая представляет собой только размер выбранного вами среза, что приводит к 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.])