Meshgrid和X、Y坐标的混淆
import numpy as np
def L2Norm(f, x, y, d=0.00001):
dudx = (f(x+d,y) - f(x-d,y)) / (2*d)
dudy = (f(x,y+d) - f(x,y-d)) / (2*d)
L2Norm = np.float128(np.sqrt(dudx**2 + dudy**2))
return L2Norm
def f(x,y):
return np.float128((1.0 + np.sin(np.pi*x))*((3.0 + np.cos(2.011*y))**2)*np.e**((-x**2)-((y**2)/4)))
# 20 points in X direction
x = np.linspace(-1.0,1.0,20)
# 40 points in Y direction
y = np.linspace(-2.0,2.0,40)
[X,Y] = np.meshgrid(x,y)
L2_Norm = L2Norm(f, X, Y)
print L2_Norm[37,13]
我的函数在上面。基本上,我希望调用这个函数 L2Norm,然后得到一个数组,X方向的索引从0到19,第二个方向的索引从0到39。
但是,现在看起来第一个索引对应的是我原本期待的y的位置。
我可以调用 L2_Norm[39,19],但不能调用 L2_Norm[19,39]。为什么会这样呢?
1 个回答
2
如果你查看 L2_Norm.shape
,你会发现这个数组的尺寸是 (40,20)。所以,正如错误信息所说,L2_Norm[19,39]
是超出范围的,因为在这个维度中,最大索引是 19,而 39 超过了这个值。你也可以看看 X
和 Y
的形状,了解为什么 L2_Norm 的形状是这样的——如果你查看 meshgrid
的文档,原因就很清楚了:
对于长度为 Nx=len(x) 和 Ny=len(y) 的向量 x 和 y,返回的 X 和 Y 是形状为 (Ny, Nx) 的数组,其中 x 和 y 的元素会被重复,以填满矩阵:x 在第一维度上重复,y 在第二维度上重复。