【发布时间】:2020-07-15 20:20:37
【问题描述】:
我对 Python 很陌生,我试图将这个问题作为一个学习练习,但我一无所获。
我要做的是证明对于在 200ns 窗口内均匀分布的两个随机变量,它们在 7ns 内到达彼此的概率约为 5%:
X, Y ~ U[0, 200]
Z = X - Y
P(|Z|
我想知道这样做的最具分析性的方法,因为我认为 Python 可能有一些有用的库可以提供帮助,并且因为如果我想做一个随机模拟,我会在 C++ ROOT 中进行,这将花费我更少的时间时间!
我做的方法如下,但它与我分析计算的不同。任何人都可以提出更好/更准确的方法来解决同样的问题吗?
非常感谢!
from scipy.stats import uniform, expon
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(1, 1)
a, b = 0, 200
size = 1000000
# Genrating uniform distribution
uniform_distribution = uniform(loc=a, scale=b)
x = uniform_distribution.rvs(size=size)
y = uniform_distribution.rvs(size=size)
z=x-y
ax.hist(z)
zsmall=[z for i in z if abs(i)<7]
n=len(zsmall)
print("probability = ",n/size)
【问题讨论】:
-
有什么问题?
-
到目前为止做得很好,您似乎走在了正确的轨道上。如果你准确地说出你得到了什么结果,以及你期望得到什么,它会帮助别人帮助你。
-
我已将 Z 更改为 |Z|在上面的等式(第 7 行)中,使等式与您的解释和代码一致。
-
我同意罗伯特的观点,你的代码看起来很可靠。您可以通过排列比整个
z更小的对象来计算它们来节省一些内存,例如zsmall=['' for i in z if abs(i)<7]。或者更易读的n = sum(abs(z) < 7),虽然速度要慢得多。
标签: python scipy statistics uniform-distribution