簡體   English   中英

組合不同大小的 dask 數組時如何利用 xarray 的稀疏功能?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM