在if语句条件中使用数组

时间:2013-06-03 14:41:28

标签: python arrays if-statement conditional-statements

如何在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中的值在正确的位置更新 谢谢你的帮助!

2 个答案:

答案 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是您正在检查的数组。 我希望这会有所帮助。