在 numpy 中使用网格网格进行条件操作并合并它们?



我有两个变量,x,y。我想根据应用于 (x,y( 对的所有可能组合的条件计算一组次要变量。 我的最终目标是在 x,y 网格上使用这些变量生成曲面图。

例如,考虑以下条件:

A 如果 $(x> y*\sqrt( (4*y(
  • + 1(( AND (y B 如果 $(x <y*\sqrt(>
  • + 1(( 和 (y> x*\sqrt( (4*x(+1( $
  • C 如果 $(x <y*\sqrt(>
  • + 1(( AND (y
  • D,如果 $x = y$

在 [1,5] 中 (x,y(,其中结果集 {A,B,C,D} 将表示我打算绘制的预期次要变量之一。

我的方法是创建一个由x和y组成的网格,然后运行单独的条件。我以四个单独的网格结束。

具体问题:我将如何将这四个网格合并为一个,以便我可以进行表面图?

一般问题:这种方法有意义吗?考虑到我将处理 [1,10000+] 的 x,y,以及 {A,B,C,D} 的情况将涉及更多代数,是否有更简化或更有效的方法?

到目前为止我的尝试:

x  = np.arange(1, 6, 1) 
y = np.arange(1, 6, 1) 

xx, yy  = np.meshgrid(x, y)
case_a = np.where(np.logical_and((xx > yy *( (4*yy)/1+1)**(1/2)), (yy < xx *((4*xx)/1+1)**(1/2))), "A", "")
case_b = np.where(np.logical_and((xx < yy *( (4*yy)/1+1)**(1/2)), (yy > xx *((4*xx)/1+1)**(1/2))), "B", "") 
case_c = np.where(np.logical_and((xx < yy *( (4*yy)/1+1)**(1/2)), (yy < xx *((4*xx)/1+1)**(1/2))), "C", "")
case_d = np.where(xx == yy, "D", "")

PS:我不确定如何在此SE中实现乳胶代码。 提前感谢,

使用掩码创建条件:

ma = np.logical_and((xx > yy *( (4*yy)/1+1)**(1/2)), (yy < xx *((4*xx)/1+1)**(1/2)))
mb = np.logical_and((xx < yy *( (4*yy)/1+1)**(1/2)), (yy > xx *((4*xx)/1+1)**(1/2)))
mc = np.logical_and((xx < yy *( (4*yy)/1+1)**(1/2)), (yy < xx *((4*xx)/1+1)**(1/2)))
md = xx == yy
# case_a = np.where(ma, "A", "")

然后你可以使用np.select

case = np.select([ma, mb, mc, md], ['a', 'b', 'c', 'd'])

最新更新