创建一个2D数组,它是两个函数的乘积

时间:2015-08-12 15:12:38

标签: python math visualization equations

我正在研究可视化并尝试创建一个2D数组,该数组是X轴上的归一化高斯函数和Y轴上的归一化指数函数(使用Python)的产物。

2 个答案:

答案 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()

enter image description here

如果您不能或不想使用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]