我正在研究可视化并尝试创建一个2D数组,该数组是X轴上的归一化高斯函数和Y轴上的归一化指数函数(使用Python)的产物。
答案 0 :(得分:3)
我会使用NumPy。您可以使用np.meshgrid
创建(X, Y)
轴,并使用NumPy的矢量化函数在这些坐标上创建函数。下面的数组f
是您的二维数组,此处包含exp(-X/4)
和exp(-((Y-2)/1.5)**2)
的乘积。 (在这里替换你自己的规范化函数。)
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,10,100)
y = np.linspace(0,5,100)
X, Y = np.meshgrid(x, y)
f = np.exp(-X/4.) * np.exp(-((Y-2)/1.5)**2)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.imshow(f)
plt.show()
如果您不能或不想使用NumPy,您必须手动循环并使用传统的math
功能:
import math
dx, dy = 0.1, 0.05
nx, ny = 101, 101
f = [[None]*nx for i in range(ny)]
for ix in range(nx):
x = xmin + dx*ix
for iy in range(ny):
y = ymin + dy*iy
f[iy][ix] = math.exp(-x/4.) * math.exp(-((y-2)/1.5)**2)
答案 1 :(得分:0)
我会为此使用numpy,因为numpy可以很容易地做你想要的事情。如果你不能使用它,那么类似下面的东西应该有效:
import math
def gauss(x, mu=0.0, sigma=1.0):
return 1.0 / math.sqrt(2.0*math.pi*sigma**2) * math.exp(-0.5*(x-mu)**2/sigma**2)
def exponential(x, lam=1.0):
return lam * math.exp(-lam * x)
# X values from -10 to 10 with 0.01 step size
xvals = [x * 0.01 for x in range(-1000, 1001)]
# Y values from 0 to 10 with 0.01 step size
yvals = [y * 0.01 for y in range(0, 1001)]
# Calculate your function at the grid points
f = [[gauss(x)*exponential(y) for x in xvals] for y in yvals]