She*_*284 8 python optimization numpy nan scientific-computing
我想明智地添加数千个4D数组元素并考虑到nans.使用1D数组的一个简单示例是:
X = array([4,7,89,nan,89,65, nan])
Y = array([0,5,4, 9, 8, 100,nan])
z = X+Y
print z = array([4,12,93,9,97,165,nan])
Run Code Online (Sandbox Code Playgroud)
我已经写了一个简单的for循环,但它需要永远 - 不是一个聪明的解决方案.另一个解决方案可能是创建一个更大的阵列并使用瓶颈nansum,但这会占用我的笔记本电脑太多的内存.我需要超过11000个案件的总和.
有没有人有一个聪明而快速的方法来做到这一点?
Bre*_*arn 10
这是一种可能性:
>>> x = np.array([1, 2, np.nan, 3, np.nan, 4])
... y = np.array([1, np.nan, 2, 5, np.nan, 8])
>>> x = np.ma.masked_array(np.nan_to_num(x), mask=np.isnan(x) & np.isnan(y))
>>> y = np.ma.masked_array(np.nan_to_num(y), mask=x.mask)
>>> (x+y).filled(np.nan)
array([ 2., 2., 2., 8., nan, 12.])
Run Code Online (Sandbox Code Playgroud)
真正的困难是你似乎想要nan被解释为零,除非特定位置的所有值都是nan.这意味着您必须同时查看x和y以确定要替换的nans.如果你可以替换所有的nan值,那么你就可以做到np.nan_to_num(x) + np.nan_to_num(y).