Numpy的经验密度函数

时间:2016-02-15 12:07:42

标签: python numpy

以下是我如何获得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 方式吗?

2 个答案:

答案 0 :(得分:4)

在使用broadcastingX扩展为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)