Заменить процент истинных элементов в Boolean Numpy Array - PullRequest
1 голос
/ 13 июля 2020

У меня есть массив numpy, который может выглядеть так:

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

Мне нужно заменить значения True на True или False в зависимости от вероятности. Например, если вероятность равна 0,5, одно или другое будет заменено на False. Фактически к каждому элементу будет применена вероятность.

Итак, у меня есть numpy где. Но я не совсем понимаю, как это сделать:

Где value == True заменить на случайное значение.

Ответы [ 2 ]

2 голосов
/ 13 июля 2020

Предполагая, что вам нужно равномерное распределение вероятностей

import numpy as np
matches = np.array([True, True, False, False, False])
# Here you create an array with the same length as the number of True values in matches
random_values = np.random.uniform(low=0, high=100, size=(sum(matches)))

# Setting the threshold and checking which random values are lower. 
# If they are higher or equal it returns False, if they are lower it returns True
threshold = 75
random_values_outcome = random_values < threshold 

# Substituting the True entries in matches with corresponding entries from
# random_values_outcome
matches[matches == True] = random_values_outcome
0 голосов
/ 13 июля 2020

Это сработало для меня:

import numpy as np
import random

matches = np.array([True, True, False, False, False])
for position, value in np.ndenumerate(matches):
    if value == True:
        matches[position] = random.choice([True, False])

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