正态分布的矢量化实现

时间:2017-09-15 08:09:19

标签: python numpy vectorization

我试图在不使用任何numpy函数的情况下实现高斯分布的矢量化实现。

为了清楚起见,我希望在没有forloop的情况下获得与以下相同的结果。

import numpy as np
import matplotlib.pyplot as plt
import math

x = np.linspace(-1, 1, 100)
y = np.linspace(-1, 1, 100)

for i in range(0, len(x)):
    y[i] = normpdf(y[i], 0, .1)

plt.plot(x, y)
plt.show()

def normpdf(x, mean, sd):
    var = float(sd)**2
    denom = (2*math.pi*var)**.5
    num = math.exp(-(float(x)-float(mean))**2/(2*var))
    return num/denom

1 个答案:

答案 0 :(得分:1)

math.exp不同,np.exp可以直接在数组上操作(逐点)。所以用以下方法替换normpdf:

def normpdf(x, mean, sd):
    var = float(sd)**2
    denom = (2*math.pi*var)**.5
    num = np.exp(-( x - mean)**2/(2*var))
    return num/denom

你可以在没有循环的情况下直接在x上调用normpdf。

我真的不明白你如何在不使用numpy函数的情况下从numpy矢量化中受益。