Numpy对两个数组的条件算术操作
我还在努力学习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
(表示缺失值)当作零来处理。