如何在函数中写入条件(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()
答案 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)