python,如何在函数中写入条件?

时间:2013-12-08 01:18:12

标签: python function numpy logic conditional-statements

如何在函数中写入条件(k_over_iq)?

dt_for_all_days_np=a numpy array of numbers.


def k_over_iq(dt):
    if dt !=0:
       return 0.7*(1-e**(-0.01*dt**2.4))
    else:
       return 1

 k_over_iq_i=k_over_iq(dt_for_all_days_np)

我收到以下错误:

如果dt!= 0:ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()

2 个答案:

答案 0 :(得分:1)

如果if dt != 0:dt数组,

numpy将无效。 if尝试从数组中获取单个布尔值,并且当错误消息警告时,这是不明确的:array([True, False])是真还是假?

要以矢量化方式解决这个问题,有两种常用方法是使用where或使用布尔索引进行修补。

方法#1,np.where

>>> dt = np.array([0,1,2,3])
>>> np.where(dt != 0, 0.7*(1-np.exp(-0.01*dt**2.4)), 1)
array([ 1.        ,  0.00696512,  0.03598813,  0.09124601])

只要dt != 0

,就会使用该功能
>>> dt != 0
array([False,  True,  True,  True], dtype=bool)

,否则为1。

方法#2:布局索引到补丁

在任何地方计算函数,然后修复错误的值。

>>> b = 0.7*(1-np.exp(-0.01*dt**2.4))
>>> b
array([ 0.        ,  0.00696512,  0.03598813,  0.09124601])
>>> b[dt == 0] = 1
>>> b
array([ 1.        ,  0.00696512,  0.03598813,  0.09124601])

答案 1 :(得分:0)

缩进是您功能中的问题 我建议您阅读此内容: Python: Myths about Indentation

def k_over_iq(dt):
    if dt !=0:
       return 0.7*(1-e**(-0.01*dt**2.4))
    else:
       return 1

k_over_iq_i=k_over_iq(dt_for_all_days_np)