我将一个值数组作为参数传递给函数。此函数在某个位置除以作为参数给定的值。我想绕过零值的计算,这样我就不必除以零。
import numpy as np
def test(t):
e = np.where(t==0,0,10/t)
return e
i = np.arange(0, 5, 1)
print('in: ',i)
o = test(i)
print('out:',o)
输出为
in: [0 1 2 3 4]
out: [ 0. 10. 5. 3.33333333 2.5 ]
<ipython-input-50-321938d419be>:4: RuntimeWarning: divide by zero encountered in true_divide
e = np.where(t==0,0,10/t)
我认为np.where是合适的函数,但不幸的是,我总是收到一个运行时警告"除以零"。所以,它做了正确的事情,但警告令人讨厌。我当然可以压制警告,但我想知道是否有更清洁的解决方案来解决这个问题?
使用np.divide(10, t, where=t!=0)
:
import numpy as np
def test(t):
e = np.divide(10, i, where=i!=0)
return e
i = np.arange(0, 5, 1)
print('in: ',i)
o = test(i)
print('out:',o)
是的,您可以测试除数是否为零,就像您所做的那样,但可以考虑测试它是否等于浮点零0.0
,或者以其他方式提供浮点参数。
更改test
def test(t):
e = np.where(t==0.0,0,10.0/t) # Note : t == 0.0 (a float comparison)
return e
和/或使用浮点参数:
i = np.arange(0., 5., 1.)
也会给你一个没有异常的结果。