【问题标题】:Replace percentage of True items in Boolean Numpy Array替换布尔 Numpy 数组中 True 项的百分比
【发布时间】:2020-07-13 09:27:47
【问题描述】:

我有一个 numpy 数组,可能看起来像:

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

我需要根据概率将True 值替换为TrueFalse。例如,如果概率为 0.5,一个或另一个将被替换为 False。实际上每个元素都会应用概率。

所以我有 numpy 在哪里。但我不知道该怎么做:

其中value == True 替换为随机值。

【问题讨论】:

  • 不清楚你想用 True 值做什么。 “我需要根据概率用 True 或 False 替换 True 值”是什么意思。你说你想要一个随机值,但是有几个概率分布,是正态分布吗?还是制服?等
  • 好的,感谢您的快速回复。
  • 哎呀!所以对于每个真值:如果 100 中的随机值高于某个值,则替换为 False。因此,如果阈值是 75% ......如果随机值 >= 75 则更改布尔值。我想每个项目都统一。
  • 或者....... 用 False 替换一定百分比的正确
  • 好的,现在更清楚了。我仍然不确定的是你想使用什么样的概率分布。 0 到 100 之间的所有数字是否应该具有相同的发生可能性(均匀分布),还是应该遵循其他分布?

标签: python numpy


【解决方案1】:

假设你想要一个均匀的概率分布

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

【讨论】:

  • 好的,太棒了。谢谢你的帮助。最后一行是关键,只是用相同大小的数组替换了数组的一个子集。祝你有美好的一天!
  • 显然我太笨了,不能投票!!
  • 没问题!我在最后一行所做的称为“布尔数组索引”,基本上您可以设置一个条件,例如匹配 == True,然后将其用作数组的索引,您将获得与该条件匹配的所有元素。您可以查看:numpy.org/devdocs/reference/…
【解决方案2】:

这对我有用:

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)

【讨论】:

    猜你喜欢
    • 2016-03-11
    • 2019-04-11
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 2017-09-24
    • 2019-07-08
    • 2015-05-29
    相关资源
    最近更新 更多