可以将矢量化应用于由两个或多个函数定义的函数Z = f(X,Y)

新石:

我正在使用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倍,具体取决于网格大小。在这种情况下可以应用矢量化吗?怎么样?谢谢!

丹尼尔·F:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将两个(或多个)选项值应用于F#中的函数的正确方法

F# - 将函数应用于两个不同长度的数组

是否可以定义将多个函数应用于单个参数的F#运算符(几乎与||>运算符相反)?

Python Pandas。将函数应用于矢量化形式

将函数应用于数据框以创建列表的矢量化方法

将 3D 旋转矩阵应用于从表面函数获得的 x、y、z 值

F#:“类型X = Z的Y”的含义

如何绘制由函数f(x,y)生成的曲面,其中值x和y受约束?

R 中从输入向量 x,y 和用户定义的函数 f(x,y) 生成输出矩阵 Z 的简单方法

R将自定义矢量化函数应用于数据帧中的行,特定列

F#将功能一次应用于两个列表

从定义一个函数f1(x)的对象的另一函数F0(X,Y),但设置y以一个固定的值c ++

如何编写使用函数f和浮点数x并使用Swift将f应用于xk次的函数?

将MethodImplOptions.AggressiveInlining应用于F#函数

我有两个方程 f(x,y,k)=0 和 g(x,y,k)=0。我想在 Python 中绘制 x,y 平面中的相交曲线

将多个元组应用于同一个函数(即apply(f,tuples ...)`),而无需递归或`tuple_cat`

是否可以将两个函数应用于 Clojure 中的列表?

在Matlab中绘制范围为x,y,z的四个变量u = f(x,y,z)

用二次多项式拟合函数f(x,y,z)

使用boost :: numeric :: odeint积分非线性函数f'(x,y,z)= a + b * I

MATLAB中隐式函数f(x,y,z)= 0的轮廓

如何基于坐标函数f(x,y,z)剪切/阈值?

从两个表面的交点找到方程y = y(x)z = z(x,y)

有没有一种方法可以对将平均值函数应用于ndarray中的蒙版区域进行矢量化处理?

将两个自变量的函数应用于两个矩阵

Bash 函数将确保一个数字 (n) 可以被其他两个数字 (x) 和 (y) 整除

当我想要获得期望的分数F使得F = X / Y时,我们可以写一个给我两个整数X和Y的算法吗?

将多个函数应用于一列并将结果发送到两个新列

如何使用 dplyr 在以 .x 和 .y 结尾的一组变量中应用具有两个变量的函数(x,y)