根据目标块大小和块宽高比确定给定xarray数据集的适当块大小
项目描述
# dynamic_chunks
根据目标块大小和‘块宽高比’确定给定xarray数据集的适当块大小
块宽高比描述了沿给定维度的块数量。考虑一个具有两个维度(a和b)的数据集。块宽高比{‘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的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6fbeb8e693f55ffe19e04b4a1b4e733b09c80b4dadc5e97a0927fdebdca80814 |
|
MD5 | d0df613a566b316d3559e0977425e317 |
|
BLAKE2b-256 | 520ebc904e2d5f88b382a3ab8d686050d5f805f35323e91e49f9bb2cc1e80463 |
dynamic_chunks-0.0.3-py3-none-any.whl的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 77783e95893845836a22ecfd5422ec1b42d9621ec26b76b63fb7e20eadca33d7 |
|
MD5 | 3930d239d288860ec0d44d50b580929f |
|
BLAKE2b-256 | 1289bb99bca601f2ccd666b087528569e7fd884b9e95b31378ef6e94a67a83ae |