14

我有一个定义

def myfunc(a, b):
    if a < (b*10):
        result = a*2
    else:
        result = a*(-1)
    return result

现在,当我使用 for 循环一个一个地输入我的ab值时,这显然可以完美地工作,但是它需要很长时间(我已经稍微简化了定义)并且我从经验中知道将值作为数组传递会加速它向上。

那么如何修改此代码以接受数组。我使用了any()andall()命令,但我必须错误地使用它们,因为我的函数只吐出一个值而不是一组值。

我想要的输出的一个例子是:

>>>a = np.array([1,5,50,500])
>>>b = 1
>>>print myfunc(a, b)
array([-1, -5, 100, 1000])
4

3 回答 3

16

你可以使用np.where

def myfunc(a, b):
    return np.where(a < b*10, a*2, -a)    

例如,

In [48]: a = np.array([1, 5, 50, 500])

In [49]: b = 1

In [50]: myfunc(a, b)
Out[50]: array([   2,   10,  -50, -500])

请注意,输出与您想要的输出不同,但与您发布的代码一致。您当然可以通过反转不等式来获得所需的输出:

def myfunc(a, b):
    return np.where(a > b*10, a*2, -a)

然后

In [52]: myfunc(a, b)
Out[52]: array([  -1,   -5,  100, 1000])
于 2012-11-08T14:14:12.200 回答
0

您的函数很简单,可以完全删除它:

arr = [1, 5, 50, 500]
arr = [a * 2 if a < b * 10 else -a for a in arr]
于 2012-11-08T14:11:29.943 回答
0

使用列表推导:

myarray = [1, 5, 50, 500]
b = 1
[myfunc(a, b) for a in myarray]
于 2012-11-08T14:09:00.287 回答