我试图在不使用任何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
答案 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矢量化中受益。