我有兩個問題:
1.
1- 這段代碼的執行時間太長。有什么辦法可以讓它變得更快? 通過下面的代碼,我想生成100個700到1200之間的隨機離散值。
我選擇了weibull分布,因為我想生成故障率資料,請看下面的直方圖。
import random
nums = []
Alpha = 0.6
貝塔 = 0.4
while len(nums) !=100:
temp = int(random.weibullvariate(alpha, beta))
if 700 <= temp < 1200:
nums.append(temp)
print(nums)
# 繪制圖表。
#plt.hist(nums, bins = 200)
#plt.show()/span>
print(nums)
我想生成一個像這樣的柱狀圖。
我們可以將分布圖 "切割 "成所需的最小和最大值。我們通過反轉公式,將W設定為700或1200,并找到0和1之間的對應值來做到這一點。下面是一些示例代碼。
def weibull_from_uniform(shape, scale, x)。
assert 0 <= x <= 1
return scale * pow(-1 * math.log(x), 1.0 / shape)
scale_param = 0.6 0.6
shape_param = = 0.4
min_value=700.0
max_value = 1200.0
lower_bound = math.exp(-1 * pow(min_value / scale_param, shape_param))
upper_bound = math.exp(-1 * pow(max_value / scale_param, shape_param))
if lower_bound > upper_bound:
lower_bound, upper_bound = upper_bound, lower_bound
nums = []
while len(nums) < 100:
nums.append(weibull_from_uniform(shape_param, scale_param, random.uniform(lower_bound, upper_bound))
print(nums)
plt.hist(nums, bins=8)
plt.show()
這段代碼給出的直方圖與你提供的直方圖非常相似;該方法將給出與你原來方法相同的分布值,只是速度更快。請注意,這種直接方法只有在我們的形狀引數K <=1時才有效,因此密度函式是嚴格遞減的。當K >1時,Weibull密度函式增加到一個模式,然后下降,所以你可能需要從兩個統一的區間中抽取特定的最小和最大值(因為對W和U進行倒置可能會得到兩個答案)。
uj5u.com熱心網友回復:
你的問題不是很清楚,為什么你認為使用這個Weibull分布是一個好主意,也不知道你想實作什么分布。
離散均勻分布
這里有兩種方法來實作[700, 1200)上的離散均勻分布。
1) 用random
import隨機。
nums = [隨機。 randrange(700, 1200) for _ in range(100)]
2)用numpy
import numpy
nums = numpy.random.randint(700, 1200, 100)
幾何分布
你用一個直方圖的例子編輯了你的問題,并提到 "我想生成一個像這樣的直方圖"。該直方圖依稀看起來像一個幾何分布。 。我們可以使用numpy.random.geometric:
import numpy
n_samples=100
p=0.5
a, b = 50, 650
cap=1200,600。
nums = numpy.random.geometric(p, size = 2 * n_samples) * a b
nums = nums[numpy.where(nums < cap)][:n_samples]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/319995.html
標籤:
上一篇:如何用圓弧狀的角段幾乎連接兩點?
下一篇:例外中的錯誤代碼

