#python #numpy
Вопрос:
В numpy у меня есть два массива a
, и b
где все записи равны 1 или 0, я это делаю c = a != b
, теперь я хочу случайным образом выбрать индекс из c
этого true
(имеется в виду индекс, где a
и b
где), как мне это сделать?
Комментарии:
1. Как выглядит ваш ожидаемый результат
Ответ №1:
Вы можете сочетать np.random.choice()
с np.where()
.
Входные:
>>> import numpy as np
>>> a = np.array([0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1])
>>> b = np.array([1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1])
>>> c = a != b
>>> c
array([ True, False, True, False, False, True, True, True, False,
False, True, False])
Пример:
>>> np.random.choice(np.where(c)[0], size=1).item()
7
Разбивка: сначала возьмем индексы c
, где True
:
>>> np.where(c)[0]
array([ 0, 2, 5, 6, 7, 10])
Теперь выбери одну:
>>> np.random.choice(np.where(c)[0], size=1)
7
И, наконец, получите 0-е значение в виде скаляра с .item()
помощью .
Комментарии:
1. о, черт возьми, я знал
np.where
, что должен был где-то использовать, ха-ха-ха
Ответ №2:
Быстрый и грязный способ добиться этого:
import numpy as np
a = np.array([1,0,1,1,1,0,0,0,1])
b = np.array([0,1,1,1,0,0,1,0,1])
c = a != b
# Generating a list of indexes where your desired criteria is met
d = np.where(c)[0]
r = np.random.choice(d)
Комментарии:
1. Цикл for
for i in range(len(c)):...
— это в основном более медленная версияd, = np.where(c)
2. Да, вы правы, просто забыли о существовании
numpy.where