Как использовать numpy, где выбирать элементы в матрице? - PullRequest
0 голосов
/ 19 января 2020

Для простой программы Q-обучения я читаю матрицу вознаграждений R. Я пытаюсь понять, почему [1] находится в конце утверждения для av_act (доступные действия).

def available_actions(state):
    current_state_row = R[state,]
    av_act = np.where(current_state_row >= 0)[1]
    return av_act

1 Ответ

0 голосов
/ 19 января 2020

Из документов :

numpy .where (условие [, x, y]) [...] Примечание: Когда предоставляется только условие, эта функция является сокращением для np.asarray (условие) .nonzero ()

Примечание верно для вашего случая, поэтому вам придется искать np.nonzero, чтобы найти

numpy .nonzero [...] Возвращает кортеж массивов, по одному для каждого измерения, содержащий индексы ненулевые элементы в этом измерении.

пример:

import numpy as np
a = np.arange(10).reshape(2,5) # input: array with 2 dimensions
a
array([[0, 1, 2, 3, 4],
       [5, 6, 7, 8, 9]])

w = np.where(a < 5) # returns: 2-element tuple, one element per dimension
w
(array([0, 0, 0, 0, 0]), array([0, 1, 2, 3, 4]))

w[1]
array([0, 1, 2, 3, 4])

Это означает, что в вашем случае np.where возвращает tuple; np.where(current_state_row >= 0)[1] выбирает результат для 2-го измерения.

Примечание: для n-мерных массивов, возвращаемое значение np.where (предоставляется только condition) ) будет иметь только n элементов. Если ваш входной массив, например, является 1-мерным, попытка выбрать второй элемент из возвращенного tuple приведет к ошибке!

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