假设我有以下课程:
class Vehicle:
def __init__(self, pevtype):
self.pevtype = pevtype如何编写使用概率分布来确定车辆是EV还是PHEV的函数?
例如,函数setVehicle()将启用:
>>> v1.pevtype = 'EV'
>>> v2.pevtype = 'PHEV'发布于 2020-05-05 11:44:46
你可以用numpy.random.choice。它获取您想要从中选择的项目列表,您也可以传递与每个项目关联的概率。在下面的示例中,我将信息存储在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)]发布于 2020-05-05 11:46:56
您可以从标准库中使用random.choices。
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
附加信息:你不限于只有两个选项,你可以得到多个结果。
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)https://stackoverflow.com/questions/61612198
复制相似问题