Удалить определенные значения из массива numpy без циклов - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть следующие массивы numpy:

# doors = [[0,1,2],[0,1,2],....,[0,1,2]
doors = np.broadcast_to(np.array([0, 1, 2]),(max_samples, 3))
# first_choice = [ [2],[1],....,[2] ]
first_choice = np.random.randint(3, size=(max_samples, 1))

Без использования каких-либо циклов (for, while и т. Д.) Я хотел бы создать новый массив numpy с именем result, который содержит двери с подавленными первымиchoice.

Пример:

first_choice = [ [2], [1], [1], [0] ....]
result = [ [0,1],[0,2],[0,2],[1,2] .....]

Как я могу это сделать?Использование любых библиотек, если они приняты, если необходимо, я думаю, что numpy может выполнить этот запрос, но не знаю как.

1 Ответ

0 голосов
/ 27 ноября 2018

Вот одна возможность:

import numpy as np

max_samples = 10
np.random.seed(100)
doors = np.broadcast_to(np.array([0, 1, 2]),(max_samples, 3))
first_choice = np.random.randint(3, size=(max_samples, 1))
print(first_choice[:, 0])
# [0 0 0 2 2 0 2 1 2 2]
# Take non-matches and reshape
result = doors[doors != first_choice].reshape((-1, 2))
print(result)
# [[1 2]
#  [1 2]
#  [1 2]
#  [0 1]
#  [0 1]
#  [1 2]
#  [0 1]
#  [0 2]
#  [0 1]
#  [0 1]]

Очевидно, чтобы это работало, каждое значение в first_choice должно присутствовать один раз (и только один раз) в каждой соответствующей строке doors.

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