跳转到主要内容

根据目标块大小和块宽高比确定给定xarray数据集的适当块大小

项目描述

# dynamic_chunks

根据目标块大小和‘块宽高比’确定给定xarray数据集的适当块大小

块宽高比描述了沿给定维度的块数量。考虑一个具有两个维度(ab)的数据集。块宽高比{‘a’:2, ‘b’:1}表示沿b的总块数是b的两倍。这个概念是从与[Rich Signell](https://github.com/rsignell-usgs)的讨论以及与[@amsnyder](https://github.com/alaws-USGS), [@kjdoore](https://github.com/kjdoore)在Scipy ‘23的后续冲刺中得到的灵感。想法是可能想要优化数据集的块化,例如使沿时间操作比沿空间维度操作慢n倍。

## 使用 dynamic_chunks实现几个算法,输入签名如下

`python chunk_dict = choosen_algorithm(ds, desired_chunksize, target_aspect_ratio, size_tolerance) ` 让我们用xarray示例数据集来演示这个例子

`python import xarray as xr from dynamic_chunks.algorithms import even_divisor_algo ds = xr.tutorial.open_dataset("rasm").load() `

### 沿维度使用偶数因子重分块 dynamic_chunks.algorithms.even_divisor_algo 将可能的重新分块选项限制为每个分块维度的偶数因子。

最简单的情况是沿单个维度(target_chunk_ratio 只包含一个维度,值无关紧要)对数据集进行重分块。

`python # 仅针对时间维度尝试1MB分块,容差为0.2(因此我们将接受0.8-1.2MB的分块)even_divisor_algo(ds, '1MB', {'time':1}, 0.5) ` 得到 ` {'time': 2, 'y': 205, 'x': 275} `

让我们快速测试一下 `python ds.chunk({'time':2, 'y':205, 'x':275}) ` <img width=”646” alt=”image” src=”https://github.com/jbusecke/dynamic_chunks/assets/14314623/75c88672-965c-4748-af5b-84517e04776c”>

太好了,这次我们得到了约800KB的分块。

### 沿多个维度分块 让我们在数据集的所有维度上进行分块,并希望每个维度上的分块数量相同:`python chunks = even_divisor_algo(ds, '100KiB', {'x':1, 'y':1, 'time':1}, 0.3) ds.chunk(chunks) ` <img width=”648” alt=”image” src=”https://github.com/jbusecke/dynamic_chunks/assets/14314623/eb866582-f41b-4984-b88f-1091b007ee26”>

好的,我们得到了期望的分块大小(约100KB)。

> 注意,这里为了演示目的选择了非常小的分块大小,在实际应用中,你应该根据具体情况进行调整(更多信息请参阅 [这里](https://blog.dask.org/2021/11/02/choosing-dask-chunk-sizes))).

最后,让我们检查每个维度上的总分块数量 `python {k:len(v) for k,v in ds.chunk(chunks).chunks.items()} ` ` {'time': 6, 'y': 5, 'x': 5} ` 还不错!请注意,由于偶数因子的要求,最终的分块比例可能与您提供的目标有显著差异。您应该尝试不同的尺寸和容差值,以找到适合您的分块方案。

### 保持一个维度不分块

在许多情况下,您可能根本不想在给定的维度上进行分块。您可以在 target_chunk_ratio 中使用特殊值 -1 来保持特定维度不分块。

`python chunks = even_divisor_algo(ds, '100KiB', {'x':1, 'y':1, 'time':-1}, 0.3) chunks ` 得到 ` {'time': 36, 'y': 41, 'x': 11} ` 这意味着 time 维度只有一个分块。

## 开发者指南

使用 conda 设置您的开发环境

` conda create --name dynamic_rechunking python=3.10 pip conda activate dynamic_rechunking pip install -e ".[test]" `

项目详情


下载文件

下载适合您平台的项目文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。

源分发

dynamic_chunks-0.0.3.tar.gz (17.1 kB 查看哈希值)

上传于 源代码

构建分发

dynamic_chunks-0.0.3-py3-none-any.whl (13.8 kB 查看哈希)

上传于 Python 3

由以下支持