Python numpy:用于数组除法的简明条件语法
假设一个简单的一维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而不
>>> 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