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

python,如何在函数中编写条件?,python,function,numpy,logic,conditional-statements,Python,Function,Numpy,Logic,Conditional Statements,如何在函数中写入条件(k_超过iq) 我得到以下错误: 如果dt=0:ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()缩进是函数中的问题。 我建议您阅读以下内容: 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) 如果d

如何在函数中写入条件(k_超过iq)

我得到以下错误:


如果dt=0:ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()缩进是函数中的问题。
我建议您阅读以下内容:

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!=如果
dt
numpy
数组,则0:
将不起作用。如果
试图从数组中获取一个布尔值,并且正如错误消息所警告的,那么
数组([True,False])
是真还是假

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

方法1,
np.where

无论何时
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])

函数中是否缺少一级缩进?预期结果是什么?观察到的结果是什么?为什么两者不同?我明白问题所在。是否需要将其添加到定义的函数中?我不确定你的意思。如果您愿意,没有理由不能在
k\u over\u iq
中执行上述操作。
>>> dt != 0
array([False,  True,  True,  True], dtype=bool)
>>> 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])