以下是我如何获得1000个随机变量样本的经验密度函数:
X = np.random.normal(0,1,1000)
A = np.zeros(len(X))
for i, j in enumerate(np.linspace(-5,5,100)):
A[i] = sum(abs(X-j) < 0.1) * 1.0 / len(X)
print A[i]
(它甚至可以绘制它,但这不是我的主要兴趣,我对数值结果非常感兴趣。)
我发现当大约100万个样本时,它真的很慢。
有更高效/更多 numpythonic 方式吗?
答案 0 :(得分:4)
在使用broadcasting
将X
扩展为2D
形状,然后执行相同的操作后,您可以利用np.newaxis/None
-
J = np.linspace(-5,5,100)
Aout = (np.abs(X[:,None] - J) < 0.1).sum(0) * 1.0 / len(X)
答案 1 :(得分:0)
这解决了这个问题:
X = np.random.normal(0,1,1000)
hist, bins = np.histogram(X, bins=np.linspace(-5,5,100), density=True)