如何将 xarray 数据集展平为一维 numpy 数组?
How to flatten an xarray dataset into a 1D numpy array?
是否有一种简单的方法可以将 xarray 数据集展平为单个一维 numpy 数组?
例如,展平以下测试数据集:
xr.Dataset({
'a' : xr.DataArray(
data=[10,11,12,13,14],
coords={'x':[0,1,2,3,4]},
dims={'x':5}
),
'b' : xr.DataArray(data=1,coords={'y':0}),
'c' : xr.DataArray(data=2,coords={'y':0}),
'd' : xr.DataArray(data=3,coords={'y':0})
})
至
[10,11,12,13,14,1,2,3]
?
如果您不介意重复值,可以使用 .to_array()
,然后在 NumPy 中展平这些值,例如,
>>> ds.to_array().values.ravel()
array([10, 11, 12, 13, 14, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3,
3, 3, 3])
如果你不想要重复的值,那么你需要自己写一些东西,例如,
>>> np.concatenate([v.values.ravel() for v in ds.data_vars.values()])
array([10, 11, 12, 13, 14, 1, 2, 3])
更一般地说,这听起来有点类似于为机器学习应用程序的 "stacking" 二维数据变量提议的接口:https://github.com/pydata/xarray/issues/1317
从问题中获取数据集:
ds = xr.Dataset({
'a' : xr.DataArray(
data=[10,11,12,13,14],
coords={'x':[0,1,2,3,4]},
dims={'x':5}
),
'b' : xr.DataArray(data=1,coords={'y':0}),
'c' : xr.DataArray(data=2,coords={'y':0}),
'd' : xr.DataArray(data=3,coords={'y':0})
})
获取数据变量列表:
variables = ds.data_vars
使用np.flatten()
方法将数组缩减为一维:
arrays = [ ds[i].values.flatten() for i in variables ]
然后展开一维数组列表(如detailed in this answer):
arrays = [i for j in arrays for i in j ]
现在按照 Q 中的要求将其转换为数组(当前为列表):
array = np.array(arrays)
截至 2019 年 7 月,xarray 现在具有执行此功能的函数 to_stacked_array and to_unstacked_dataset。
是否有一种简单的方法可以将 xarray 数据集展平为单个一维 numpy 数组?
例如,展平以下测试数据集:
xr.Dataset({
'a' : xr.DataArray(
data=[10,11,12,13,14],
coords={'x':[0,1,2,3,4]},
dims={'x':5}
),
'b' : xr.DataArray(data=1,coords={'y':0}),
'c' : xr.DataArray(data=2,coords={'y':0}),
'd' : xr.DataArray(data=3,coords={'y':0})
})
至
[10,11,12,13,14,1,2,3]
?
如果您不介意重复值,可以使用 .to_array()
,然后在 NumPy 中展平这些值,例如,
>>> ds.to_array().values.ravel()
array([10, 11, 12, 13, 14, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3,
3, 3, 3])
如果你不想要重复的值,那么你需要自己写一些东西,例如,
>>> np.concatenate([v.values.ravel() for v in ds.data_vars.values()])
array([10, 11, 12, 13, 14, 1, 2, 3])
更一般地说,这听起来有点类似于为机器学习应用程序的 "stacking" 二维数据变量提议的接口:https://github.com/pydata/xarray/issues/1317
从问题中获取数据集:
ds = xr.Dataset({
'a' : xr.DataArray(
data=[10,11,12,13,14],
coords={'x':[0,1,2,3,4]},
dims={'x':5}
),
'b' : xr.DataArray(data=1,coords={'y':0}),
'c' : xr.DataArray(data=2,coords={'y':0}),
'd' : xr.DataArray(data=3,coords={'y':0})
})
获取数据变量列表:
variables = ds.data_vars
使用np.flatten()
方法将数组缩减为一维:
arrays = [ ds[i].values.flatten() for i in variables ]
然后展开一维数组列表(如detailed in this answer):
arrays = [i for j in arrays for i in j ]
现在按照 Q 中的要求将其转换为数组(当前为列表):
array = np.array(arrays)
截至 2019 年 7 月,xarray 现在具有执行此功能的函数 to_stacked_array and to_unstacked_dataset。