首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python类中使用概率分布?

如何在python类中使用概率分布?
EN

Stack Overflow用户
提问于 2020-05-05 11:35:33
回答 2查看 362关注 0票数 0

假设我有以下课程:

代码语言:javascript
复制
class Vehicle:

    def __init__(self, pevtype):
        self.pevtype = pevtype

如何编写使用概率分布来确定车辆是EV还是PHEV的函数?

例如,函数setVehicle()将启用:

代码语言:javascript
复制
>>> v1.pevtype = 'EV'
>>> v2.pevtype = 'PHEV'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-05 11:44:46

你可以用numpy.random.choice。它获取您想要从中选择的项目列表,您也可以传递与每个项目关联的概率。在下面的示例中,我将信息存储在dict中,其中keys是要从中选择的项,values是各自的概率:

代码语言:javascript
复制
import numpy as np


class Vehicle:
    def __init__(self, pevtypes):
        self.pevtype = np.random.choice(
            list(pevtypes), p=list(pevtypes.values())
        )

car_types = {'EV': 0.3, 'PHEV': 0.7}

# for a single car
car = Vehicle(car_types)

print(car.pevtype)

# for 2 or more cars e.g. like this
cars = [Vehicle(car_types) for _ in range(3)]
票数 0
EN

Stack Overflow用户

发布于 2020-05-05 11:46:56

您可以从标准库中使用random.choices

代码语言:javascript
复制
import random
values = ['EV', 'PHEV']
for _ in range(10):
    result = random.choices(values, weights=(0.3, 0.7))
    print(result[0], end=' ')

输出示例:PHEV EV PHEV PHEV PHEV PHEV PHEV PHEV EV EV

附加信息:你不限于只有两个选项,你可以得到多个结果。

代码语言:javascript
复制
import random
values = ['A', 'B', 'C']
for _ in range(10):
    result = random.choices(values, weights=(1, 4, 10), k=2)
    print(result)

示例输出:

代码语言:javascript
复制
['B', 'C']
['B', 'C']
['C', 'C']
['C', 'C']
['C', 'B']
['C', 'B']
['B', 'C']
['C', 'C']
['C', 'C']
['B', 'C']

这是一个可能的实现,包括问题中的代码。在这里,我假设pev类型及其概率在代码中是固定的,所以我将它们作为类Vehicle的一个属性。这可以根据需要进行更改。请注意,这些发行版是相对的,不一定要加到精确的1.0

代码语言:javascript
复制
import random

class Vehicle:
    pev_types = {'EV': 0.3, 'PHEV': 0.7, 'X': 0.2}

    def __init__(self):
        self.pev_type = self._get_random_pev_type()

    def __str__(self):
        return f'Vehicle (pev type:{self.pev_type})'

    def _get_random_pev_type(self):
        return random.choices(list(self.pev_types), weights=self.pev_types.values())[0]

print(', '.join(str(Vehicle()) for _ in range(10)))

示例输出:

代码语言:javascript
复制
Vehicle (EV), Vehicle (EV), Vehicle (X), Vehicle (PHEV), Vehicle (PHEV), Vehicle (X), Vehicle (PHEV), Vehicle (PHEV), Vehicle (PHEV), Vehicle (PHEV)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61612198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档