Выберите запись, которая удовлетворяет условию

1

Я использую 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

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

Теги:
arrays
numpy
matrix

1 ответ

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню