Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 关于X和Y坐标的网格和混淆_Python_Numpy - Fatal编程技术网

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

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

我的功能在上面。基本上,我希望调用函数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范数有这样的形状——如果查看
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]