Python 关于X和Y坐标的网格和混淆
我的功能在上面。基本上,我希望调用函数L2Norm,得到一个X方向从0到19的数组,或者第一个索引,第二个索引从0到39 相反,似乎第一个索引现在对应于我期望y的位置 我可以打电话 L2_范数[39,19] 但不是 L2_范数[19,39]Python 关于X和Y坐标的网格和混淆,python,numpy,Python,Numpy,我的功能在上面。基本上,我希望调用函数L2Norm,得到一个X方向从0到19的数组,或者第一个索引,第二个索引从0到39 相反,似乎第一个索引现在对应于我期望y的位置 我可以打电话 L2_范数[39,19] 但不是 L2_范数[19,39] 这是为什么?如果调用L2\u Norm.shape,您将看到数组的维度是(40,20),因此错误状态为,L2\u Norm[19,39]超出范围,因为39>该维度中的最大索引是19。查看X和Y的形状,了解为什么L2\u范数有这样的形状——如果查看meshgr
这是为什么?如果调用
L2\u Norm.shape
,您将看到数组的维度是(40,20),因此错误状态为,L2\u Norm[19,39]
超出范围,因为39>该维度中的最大索引是19。查看X
和Y
的形状,了解为什么L2\u范数有这样的形状——如果查看meshgrid
文档,原因很清楚:
对于具有长度的向量x,y
Nx=len(x)和Ny=len(y),返回x,y
其中X和Y是(Ny,Nx)形状
包含x和y元素的数组
重复此操作以沿方向填充矩阵
第一个维度表示x,第二个维度表示x
y
如果我理解正确的话,我的L2最小值(在L2_范数[39,19])在这一点上的函数是f(X[37,13],Y[37,13])?我不确定最小值。我的答案只说明了索引超出范围错误的原因。感谢您的帮助!我不想打扰你。。。我把上面的数字搞错了。基本上,当我调用上面的L2_范数[37,13]时,它的结果与调用L2_范数(f,X[37,13],Y[37,13])的结果相同,从我的检查和代码的预期行为来看,这似乎是正确的。
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]