如何在if
语句的条件部分使用数组?我希望程序检查每个元素的绝对值,并返回适当的部分。这带来了一些希望:带有 if 语句的 Numpy Array 的功能
但是这种技术在我的情况下不起作用。这是我正在尝试的代码:
def v(x,y):
if x[abs(x)<a] and y[abs(y)<a]:
return #something 1
if x[a<abs(x)<b] and y[a<abs(y)<b]:
return #something 2
if x[b<abs(x)<R] and y[b<abs(y)<R]:
return #something 3
这里,x 和 y 是数组。(实际上是由创建的网格x,y = ogrid[-R:R:.01, -R:R:.01]
)
编辑:我发现(经过多次试验和错误)的最佳方法是使用布尔数组。这是代码:
#Create a grid of coordinates. XY-Plane.
x,y=ogrid[-R:R+1:1,-R:R+1:1]
#Create the polar distance 2D array. Conditions are tested on this array.
r=sqrt(x**2+y**2)
#Create 2D array to hold the result
v=zeros([len(x*y),len(x*y)],float)
#idr is the boolean 2D array of same size and shape as r.
#It holds truth values wherever the condition is true.
idr=(r<a)
v[~invert(idr)]= #function 1 of r[~invert(idr)]
idr=((r>=a)&(r<b))
v[~invert(idr)]= #function 2 of r[~invert(idr)]
idr=(r>=b)&(r<=R)
v[~invert(idr)]= #function 3 of r[~invert(idr)]
print v
v 中的值会在正确的位置更新。
谢谢您的帮助!