我正在划分两个numpy数组:
>>> import numpy as np >>> a1 = np.array([[ 0, 3], [ 0, 2]]) >>> a2 = np.array([[ 0, 3], [ 0, 1]]) >>> d = a1/a2 >>> d array([[ nan, 1.], [ nan, 2.]]) >>> where_are_NaNs = np.isnan(d) >>> d[where_are_NaNs] = 0 >>> d >>> array([[ 0., 1.], [ 0., 2.]])
我正在寻找一种方法来获得0而不是使用for循环的Nan?
numpy fillna()
和pandas 有类似的功能吗?
这应该工作并将所有NAN转换为0
d[np.isnan(d)] = 0
如果你想要一行,请考虑
d = np.nan_to_num(a1/a2)
将所有NAN转换为0,请参见此处:http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.nan_to_num.html
注意:除以0时,您应该遵循下面的@ imp9解决方案,以避免不必要的警告或错误.
您可能应该在的上下文中np.errstate(divide='ignore', invalid='ignore')
进行除法,以使被除数本身不为零(两者是单独的警告)时,除以0不会引发错误或警告。
with np.errstate(divide='ignore', invalid='ignore'): d = a1/a2 #Geotob's solution d[np.isnan(d)] = 0
如果您希望它发出警告,请更改'ignore'
为'warn'
。参考