-4

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

4

2 回答 2

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
于 2013-06-03T15:04:16.910 回答
-2

如果你想检查每个元素的绝对值,试试这个:

if( abs(x[1]) >= 3) #or whatever you want to check
if( abs(x[2]) >= 4) #or whatever

如果 x 是您正在检查的数组。我希望这有帮助。

于 2013-06-03T14:50:47.067 回答