我正在使用np.meshgrid()绘制标量函数:Z = f(X,Y)。
当f(X,Y)由单个方程式定义时,我没有问题。但是,将f(X,Y)分为两个或多个方程式时,例如:
X, Y = np.meshgrid(x, y, sparse = True, indexing = 'ij')
Z = f1(X,Y), y1 < y <= y2
Z = f2(X,Y), y > y2
我不知道如何从meshgrid数组中提取'Y'的值,以便对照条件语句中的y1和y2进行检查。我尝试了以下几种方法,但均无济于事:
row1, col1 = np.where(Y == y1)
row2, col2 = np.where(Y == y2)
if( Y > Y[row1][0] and Y <= Y[row2][0] ):
Z = f1(X, Y)
elif ( Y > Y[row2][0] ):
Z = f2(X, Y)
当我将数组用于Z的计算时,与矢量化相比,执行速度确实很慢,至少慢10到20倍,具体取决于网格大小。在这种情况下可以应用矢量化吗?怎么样?谢谢!
np.where
一般使用。
z = np.where(Y <= y2, f1(X, Y), f2(X, Y))
如果大小写为空(如所示Y < y1
),则可能需要使用进行初始化np.zeros_like
Z = np.zeros_like(Y) # same shape and dtype as `Y`
np.where(y1 < Y <= y2, f1(X, Y), out = Z)
np.where(y< y2, f2(X,Y), out = Z)
请注意,如果其中一个函数引发的误差超出其范围,则由于会np.where
在整个X, Y
范围内计算该函数,因此会出现错误。在这种情况下,您将要尝试@Stef的方法
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句