Почему np.where не возвращает ожидаемые значения - PullRequest
1 голос
/ 15 октября 2019

Код инициализации

arr = np.zeros((2,2,2,2))

Мой входной массив -

[[[[0.5, 1. ],
     [0.6, 2. ]],

    [[0. , 0. ],
     [0. , 0. ]]],


   [[[0. , 0. ],
     [0. , 0. ]],

    [[0. , 0. ],
     [0. , 0. ]]]]

Команда

np.where(arr > 0)  

Выход

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

Размеры кортежа
state_0 * state_1 * action * new_state_1 * new_state_2

Вопросы

  1. Почему последнее значение в приведенном выше кортеже не обр [0,0,1,0] ?
  2. Какнайти new_states, где значения больше нуля?

1 Ответ

4 голосов
/ 15 октября 2019

Результаты верны, вы просто читаете их неправильно. Каждое число в первой строке представляет первый индекс результата. Вторая строка представляет второй индекс. Так,

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

соответствует точкам в обр. [0,0,0,0], обр. [0,0,0,1] и т. Д.

Вы, вероятно, были бы менее смущены, если бы результат не был квадратной формы. Попробуйте, например, это:

np.where(arr==0)
(array([0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1], dtype=int64), 
array([1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1], dtype=int64), 
array([0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1], dtype=int64), 
array([0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1], dtype=int64))

Как видите, строки не могут соответствовать местоположению одной единицы.

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