网格和关于X和Y坐标的混淆

时间:2011-02-25 03:34:57

标签: python numpy

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。

相反,似乎第一个索引现在对应于我期望的那样。

我可以打电话 L2_Norm [39,19] 但不是 L2_Norm [19,39] 这是为什么?

1 个答案:

答案 0 :(得分:2)

如果您致电L2_Norm.shape,您会看到数组的尺寸为(40,20),因此错误状态L2_Norm[19,39]超出范围,因为39>该维度中的最大索引为19.看看XY的形状以及为什么L2_Norm具有它所具有的形状 - 如果你查看它的原因很清楚meshgrid文档:

  

对于带有长度的向量x,y   Nx = len(x)和Ny = len(y),返回X,Y   其中X和Y是(Ny,Nx)形状   数组,包含x和y元素   重复沿着填充矩阵   x的第一个维度,第二个维度   收率