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

2024-06-08 20:24:35 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有以下课程:

class Vehicle:

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

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

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

>>> v1.pevtype = 'EV'
>>> v2.pevtype = 'PHEV'

Tags: 函数selfinitdefclass课程v2v1
2条回答

您可以使用标准库中的^{}

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


附加信息:您不仅限于2个选项,还可以获得多个结果

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

示例输出:

['B', 'C']
['B', 'C']
['C', 'C']
['C', 'C']
['C', 'B']
['C', 'B']
['B', 'C']
['C', 'C']
['C', 'C']
['B', 'C']

这是一个可能的实现,包括问题中的代码。这里我假设pev类型及其概率在代码中是固定的,因此我将它们作为类Vehicle的属性。这可以根据需要进行更改。请注意,这些分布是相对的,不必加起来正好等于1.0

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)))

示例输出:

Vehicle (EV), Vehicle (EV), Vehicle (X), Vehicle (PHEV), Vehicle (PHEV), Vehicle (X), Vehicle (PHEV), Vehicle (PHEV), Vehicle (PHEV), Vehicle (PHEV)

您可以使用^{}。它包含一个您想要从中选择的项目列表,并且您可以将与每个项目相关的概率传递给它。在下面的示例中,我将信息存储在dict中,其中keys是您要从中选择的项目,values是相应的概率:

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)]

相关问题 更多 >