Получить индекс случайного истинного значения PER COLUMN в массиве numpy 2-й без цикла for - PullRequest
1 голос
/ 10 апреля 2020

Я хотел бы получить индекс случайного истинного значения для каждого столбца в массиве numpy 2-d, используя наиболее эффективные возможные средства (т. Е. Без python для l oop).

Например, с учетом следующего 2-d numpy.ndarray:

np.array(
    [[True, False, False],
     [True, True, True],
     [False, True, False]]
)

Укажите 1-d numpy.ndarray, который задает позиции индекса случайных строк истинных значений на столбец (т.е. первую ось):

numpy.ndarray([0, 2, 1])

По контр-примеру следующее НЕ будет правильным:

numpy.ndarray([2, 2, 1])

, поскольку в третьем ряду 1-й столбец имеет неверное значение.

1 Ответ

3 голосов
/ 10 апреля 2020

Вы можете сделать следующее:

import numpy as np

a = np.array(
    [[True, False, False],
     [True, True, True],
     [False, True, False]]
)

result = np.argmax(a * np.random.randint(1, 100, size=a.shape), axis=0)
print(result)

Вывод

[1 2 1]

Идея состоит в том, что np.argmax всегда будет выбирать позиция, в которой массив равен True, затем случайный выбор выполняется функцией random.randint. Каждому True значению присваивается случайное целое число, и вы выбираете индекс максимума.

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