python,如何在函数中编写条件?
如何在函数中写入条件(k_超过iq) 我得到以下错误: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
如果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])