[英]How to make use of xarray's sparse functionality when combining differently sized dask arrays?
隨着 xarray 推出越來越多的稀疏數組功能,我想知道如何實現以下目標:
我有一個(實際上是懶惰的,未加載的)dask 數組 arr_a 大小讓我們說 2x1000 和一個大小為 2x10 的 dask 數組 arr_b :
from dask import array as da
import numpy as np
arr_a = da.from_array(np.random.rand(2, 1000))
arr_b = da.from_array(np.random.rand(2, 10))
我現在創建了兩個具有“相同”但不同采樣時間軸的 xarray DataArrays:
import xarray as xr
import pandas as pd
time1 = pd.timedelta_range(0, periods=1000, freq="ms")/pd.offsets.Second(1)
time2 = pd.timedelta_range(0, periods=10, freq="100ms")/pd.offsets.Second(1)
xr1 = xr.DataArray(arr_a , dims=["cycle", "time"], coords={"time": time1, "cycle": [1,2]}).rename("ch1")
xr2 = xr.DataArray(arr_b , dims=["cycle", "time"], coords={"time": time2, "cycle": [1,2]}).rename("ch2")
xr_data = xr.combine_by_coords([xr1.to_dataset(), xr2.to_dataset()])
在將兩個 DataArrays 合並/合並成一個 Dataset 后,第二個變量 xr2 是稀疏的並填充了 NaN。 這實際上很棒,但每個 NaN 都需要內存空間。 我得想辦法,這些NaN項不需要內存。
那可能嗎? 如果是,如何?
非常感謝 xarray 和 dask 團隊所做的出色工作!
任何一個:
arr_a = arr_a.map_blocks(sparse.COO)
arr_b = arr_b.map_blocks(sparse.COO)
或者:
xr1 = xarray.apply_ufunc(sparse.COO, xr1, dask="parallelized", output_dtypes=[xr1.dtype])
xr2 = xarray.apply_ufunc(sparse.COO, xr2, dask="parallelized", output_dtypes=[xr1.dtype])
在這種情況下是等效的。
將數據轉換為稀疏數據后,您可以對齊和合並。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.