Python 将xarray.apply(np.nansum)与args一起使用
我一直在尝试将Python 将xarray.apply(np.nansum)与args一起使用,python,xarray,Python,Xarray,我一直在尝试将np.nansum应用于xr.Dataset(xarray),但不断出现错误。对于三维数据集,我尝试应用于axis=2。语法不太清楚,我可能误解了,但我试过: ds.apply(np.nansum,axis=2)` and `ds.apply(lambda x: np.nansum(x,axis=2)) 并得到相同的错误: 无法使用没有显式表达式的二维数据设置变量“var” 维度名称。而是传递(DIM、数据)的元组 我猜这意味着它不知道返回到新dataset对象的维度名称是什么?
np.nansum
应用于xr.Dataset(xarray),但不断出现错误。对于三维数据集,我尝试应用于axis=2。语法不太清楚,我可能误解了,但我试过:
ds.apply(np.nansum,axis=2)` and `ds.apply(lambda x: np.nansum(x,axis=2))
并得到相同的错误:
无法使用没有显式表达式的二维数据设置变量“var”
维度名称。而是传递(DIM、数据)的元组
我猜这意味着它不知道返回到新dataset对象的维度名称是什么?有没有办法解决这个问题
有人知道xarray为什么以及何时实现np.nansum()
?
谢谢这里遇到的问题是
nansum
返回一个numpyndarray
,而不是DataArray
,这是传递到apply
的函数应该返回的
对于
nansum
,您应该只使用xarray.Dataset.sum
,如果您的数据是浮动的,它会在默认情况下跳过NaNs。Jeremy是正确的,内置的sum()
方法在默认情况下已经跳过了NaN。但如果您想提供自定义聚合函数,可以使用reduce
,例如ds.reduce(np.nansum,axis=2)
不xarray.Dataset.sum()
NaNs?你能用它传递轴2(或dim=dimname)吗?谢谢,reduce
是个好方法。另外,知道自定义函数必须返回DataArray也很方便(有意义,但不一定明显)。在使用ds.reduce
的情况下,实际上可以使用返回numpy数组的函数(正如@shoyer在这里所做的)。