在xarray中,如何将非矢量化、非通用函数应用于DataArrray,以便将值中的每个元素Map到新的元素?自定义函数应采用标量值并返回标量值:
import numpy as np
import xarray as xr
def custom_function(x):
# imagine some non-vectorized, non-numpy-ufunc stuff
return type(x) # dummy example function
data = xr.DataArray([1, 2, 3, 4], dims='x')
# this doesn't work, custom_function actually gets send the whole array [1, 2, 3, 4]
# xr.apply_ufunc(custom_function, data)
# I'd expect something like this, where this is basically a loop on all elementss
# xr.apply(custom_function, data)
# in pandas, I would just use the .apply or .map method of Series
import pandas as pd
s = data.to_series()
s.apply(custom_function)
s.map(custom_function)
3条答案
按热度按时间xuo3flqw1#
您可以通过使用apply_ufunc方法和vectorize=False,将自定义函数逐元素应用于DataArray
就像这样:
输出量:
**[编辑]**您可以通过将DataArray转换为pandas Series,应用您的自定义函数,然后将其转换回DataArray来实现这一点。你可以这样做:
输出量:
ewm0tg9j2#
或者另一个头脑 Storm 的想法:列表理解。
PS:
片段:
示例代码:
输出:
vzgqcmou3#
按照建议使用apply_ufunc,我得到了
vectorize=True
的预期结果:说明:using
vectorize=True
用numpy.vectorize
Package 了custom_function,基本上把它变成了一个for循环,这正是我所需要的。