将 xarray.apply(np.nansum) 与参数一起使用
using xarray.apply(np.nansum) with args
我一直在尝试将 np.nansum
应用于 xr.Dataset (xarray),但不断出现错误。对于 3D 数据集,我尝试应用到 axis=2。语法不是很清楚,我可能误解了documentation,但我试过了:
ds.apply(np.nansum,axis=2)` and `ds.apply(lambda x: np.nansum(x,axis=2))
并得到相同的错误:
cannot set variable 'var' with 2-dimensional data without explicit
dimension names. Pass a tuple of (dims, data) instead.
我猜这意味着它不知道新数据集对象 return 的维度名称是什么?任何想法如何解决这一问题?
有谁知道 xarray 为什么以及何时可以实现 np.nansum()
?
谢谢
您 运行 遇到的问题是 nansum
return 是一个 numpy ndarray
,而不是 DataArray
,这是传入 apply
的函数应该是 return.
对于 nansum
,您应该只使用 xarray.Dataset.sum
,如果您的数据是浮点数,默认情况下会跳过 NaN。
Jeremy 是正确的,内置 sum()
方法已经默认跳过 NaN。但是如果你想提供自定义聚合函数,你可以使用 reduce
,例如 ds.reduce(np.nansum, axis=2)
.
我一直在尝试将 np.nansum
应用于 xr.Dataset (xarray),但不断出现错误。对于 3D 数据集,我尝试应用到 axis=2。语法不是很清楚,我可能误解了documentation,但我试过了:
ds.apply(np.nansum,axis=2)` and `ds.apply(lambda x: np.nansum(x,axis=2))
并得到相同的错误:
cannot set variable 'var' with 2-dimensional data without explicit dimension names. Pass a tuple of (dims, data) instead.
我猜这意味着它不知道新数据集对象 return 的维度名称是什么?任何想法如何解决这一问题?
有谁知道 xarray 为什么以及何时可以实现 np.nansum()
?
谢谢
您 运行 遇到的问题是 nansum
return 是一个 numpy ndarray
,而不是 DataArray
,这是传入 apply
的函数应该是 return.
对于 nansum
,您应该只使用 xarray.Dataset.sum
,如果您的数据是浮点数,默认情况下会跳过 NaN。
Jeremy 是正确的,内置 sum()
方法已经默认跳过 NaN。但是如果你想提供自定义聚合函数,你可以使用 reduce
,例如 ds.reduce(np.nansum, axis=2)
.