两个数组上的Numpy条件算术运算

时间:2011-03-15 23:26:33

标签: python arrays math numpy conditional

仍然试图获得我的numpy条纹:我想在两个numpy数组上执行算术运算,这很简单:

return 0.5 * np.sum(((array1 - array2) ** 2) / (array1 + array2))

问题是,我需要能够指定条件,如果两个数组在同一个元素i上是元素0,则根本不执行操作 - 这对于在这一个上返回0 - 以便不除以0。

但是,我不知道如何在不诉诸可怕的嵌套for循环的情况下指定这个条件。提前感谢您的帮助。

修改:理想的是不必使用+1的伪数据。

3 个答案:

答案 0 :(得分:3)

return numpy.select([array1 == array2, array1 != array2], [0.5 * np.sum(((array1 - array2) ** 2) / (array1 + array2)), 0])

应该这样做...... numpy.where也可能会被使用。

答案 1 :(得分:3)

只需将np.sum()替换为np.nansum()

return 0.5 * np.nansum(((array1 - array2) ** 2) / (array1 + array2))

np.nansum()nan视为零。

答案 2 :(得分:0)

您还可以尝试后期应用numpy.nan_to_num

http://docs.scipy.org/doc/numpy/reference/generated/numpy.nan_to_num.html

虽然我发现当我在代码中除以零时,它会给出一个警告,但是在使用浮点数时将该元素填充为零(在进行整数运算时)和NaN。

如果你想在除以零时跳过总和,你也可以进行计算,然后在返回之前测试NaN

xx = np.sum(((array1 - array2) ** 2) / (array1 + array2))
if np.isnan(xx):
    return 0
else:
    return xx 

修改:要隐藏警告,您可以尝试使用numpy.seterr

http://docs.scipy.org/doc/numpy/reference/generated/numpy.seterr.html