Python numpy:用于数组除法的简明条件语法

Python numpy:用于数组除法的简明条件语法,python,syntax,numpy,Python,Syntax,Numpy,假设一个简单的一维numpy数组: >>> x = np.array([1,3,5,0,3,2]) 现在假设我要执行操作1.0/x。我可以用numpy做到这一点: >>> 1.0/x array([ 1. , 0.33333333, 0.2 , inf, 0.33333333, 0.5 ]) 这里的问题是原始元素值0的infinity inf结果,因为1.0/0似乎返回infinity而不

假设一个简单的一维numpy数组:

>>> x = np.array([1,3,5,0,3,2])
现在假设我要执行操作1.0/x。我可以用numpy做到这一点:

>>> 1.0/x
array([ 1.        ,  0.33333333,  0.2       ,         inf,  0.33333333,
    0.5       ])
这里的问题是原始元素值0的infinity inf结果,因为1.0/0似乎返回infinity而不是未定义的行为

我希望在出现这些除以0的场景时提供自己的自定义值,而不是无穷大。虽然我知道这可以通过使用循环来实现,但我想知道这种操作是否有任何惯用语法


这里有一个相关的问题,但它只涉及if-something:do-this-else:do-nothing场景,而我的问题是if-something:do-this-else:do-that场景。

您可以随时在以后修补它:

a = 1.0/x
inf_ind = np.isinf(a)
a[inf_ind] = your_value


它的优点是不妨碍nice优化的numpy方法

您可以随时在以后修补:

a = 1.0/x
inf_ind = np.isinf(a)
a[inf_ind] = your_value


它的优点是不妨碍nice优化的numpy方法

基于前面的答案,您还可以设置浮点回调模式,以检测何时需要应用inf转换

但是,我找不到针对每个浮点错误调用的回调

另见:


基于前面的答案,您还可以设置浮点回调模式,以便在需要应用inf转换时进行检测

但是,我找不到针对每个浮点错误调用的回调

另见:

import numpy
class IsDivideError(object):
    def __init__(self):
        self.hasDivideError=False

    def callback(self, x,y):
        self.hasDivideError=True

ide=IsDivideError()
numpy.seterr(divide='call')
numpy.seterrcall(lambda x,y: ide.callback(x,y) )
x = numpy.array([1,3,5,0,3,2])
val=1.0/x
if(ide.hasDivideError):
    val[numpy.isinf(val)]=5