如何在if
语句的条件部分中使用数组?我希望程序检查每个元素的绝对值,并返回相应的部分。这给了一些希望:Function of Numpy Array with if-statement
但是这种技术在我的案例中并不起作用。
以下是我尝试的代码:
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中的值在正确的位置更新
谢谢你的帮助!
答案 0 :(得分:2)
尝试使用all()
,如下所示:
import numpy
a = numpy.array([-1, -2, 1, 2, 3])
print(numpy.all(a > 0))
print(numpy.all(abs(a) > 0))
你得到:
C:\Documents and Settings\XXX\Desktop>python test.py
False
True
所以你的第一个if语句会变成这个(假设你有import numpy
):
if numpy.all(abs(x) < a) and numpy.all(abs(y) < a):
return #something 1
答案 1 :(得分:-2)
如果您想检查每个元素的绝对值,请尝试:
if( abs(x[1]) >= 3) #or whatever you want to check
if( abs(x[2]) >= 4) #or whatever
如果x是您正在检查的数组。 我希望这会有所帮助。