【发布时间】:2015-10-20 22:58:58
【问题描述】:
考虑下面的代码
>>> x = np.array([0, 0, 1, 1])
>>> np.select([x==0, True], [x+1, 1/x])
array([ 1., 1., 1., 1.])
它有两个问题。
首先,它并不懒惰。即使最终结果中不需要某些评估值,它也会急切地评估 x+1 和 1/x。
其次,numpy每次运行代码都会发出警告
RuntimeWarning: divide by zero encountered in true_divide
这与前一点有些相关,因为它正在尝试评估 1/x,即使最终答案中不需要这样做。
有没有一个懒惰的版本,不会遇到上述问题?
【问题讨论】:
-
np.select不会计算1/x,python 会。 -
有什么理由不想使用
y=x[:]; y[~x==0]=1/x[~x==0]; y[x==0]=x[x==0]+1? -
这正是我想要的。谢谢。
-
很高兴能帮上忙,我已将其添加为答案。
-
@FıratKıyak 我的也是;)
标签: python numpy select lazy-evaluation