Вы можете использовать np.stack((a,b))
для суммирования по новой оси 0, а затем вызвать nansum
для суммирования по этой оси 0:
C = np.nansum(np.stack((a,b)), axis=0)
ДляНапример,
In [34]: a = np.random.choice([1,2,3,np.nan], size=(6,7,180,360))
In [35]: b = np.random.choice([1,2,3,np.nan], size=(6,7,180,360))
In [36]: np.stack((a,b)).shape
Out[36]: (2, 6, 7, 180, 360)
In [37]: np.nansum(np.stack((a,b)), axis=0).shape
Out[37]: (6, 7, 180, 360)
У вас была правильная идея, но np.dstack
стекается вдоль третьей оси, что здесь нежелательно, поскольку у вас уже есть 4 оси:
In [31]: np.dstack((a,b)).shape
Out[31]: (6, 7, 360, 360)
Относительно вашей точки зрения (3): Обратите внимание, что поведение np.nansum
зависит от версии NumPy :
В версиях NumPy <= 1.8.0 Nan возвращается для срезов, которые являются полностью NaN или пустыми.В более поздних версиях возвращается ноль. </p>
Если вы используете версию NumPy> 1.8.0, то вам, возможно, придется использовать решение , такое как от Мартена Фабре, для решения этой проблемы.