Numpy对两个数组的条件算术操作

2 投票
3 回答
2304 浏览
提问于 2025-04-16 13:46

我还在努力学习numpy的用法:我想对两个numpy数组进行一些简单的数学运算,这其实很简单:

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

问题是,我需要设置一个条件:如果两个数组在同一个位置i的值都是0,就不要进行运算——最好是直接返回0——这样就不会出现除以0的情况。

但是,我不知道怎么设置这个条件,而不想用那种让人头疼的嵌套循环。谢谢你们的帮助。

补充说明:如果能不使用+1这种伪计数就更好了。

3 个回答

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

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

这样做应该可以解决问题……你也可以试试 numpy.where

3

只需要把 np.sum() 换成 np.nansum() 就可以了:

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

np.nansum() 会把 nan(表示缺失值)当作零来处理。

撰写回答