使用numpy.select避免div / 0错误

时间:2012-04-21 18:49:56

标签: python numpy divide-by-zero

我正在尝试使用numpy.select有条件地为数组赋值。但是,使用select需要计算所有可能的赋值,而不仅仅是相关赋值,这可能会导致div / 0错误,例如:

import numpy as np
def testfunc(z):
    conditionlist = [z < 0, z == 0, z > 0]
    choicelist = [1 / z, 0, 1 + z]
    return np.select(conditionlist, choicelist)

if __name__ == "__main__":

     print testfunc(np.array([0]))

此代码将失败并出现div / 0错误,尽管其中z = 0的1 / z实际上从未实际需要分配给返回的数组。

如何在不遇到div / 0错误的情况下有条件地为numpy数组赋值?循环是唯一的选择吗?

2 个答案:

答案 0 :(得分:4)

np.select([z < 0, z == 0, z > 0], [1 / (z + (z == 0)), 0, 1 + z])

z == 0给出了一系列布尔值。将此添加到z会为z将使用的索引提供一个没有零元素的数组,该数组等于np.select

答案 1 :(得分:1)

使用numpy.seterr将从被加除的除零行为更改为其他内容。