Chunk Grid Models#
Altay Sansal
Apr 29, 2024
4 min read
The variables in MDIO data model can represent different types of chunk grids. These grids are essential for managing multi-dimensional data arrays efficiently. In this breakdown, we will explore four distinct data models within the MDIO schema, each serving a specific purpose in data handling and organization.
MDIO implements data models following the guidelines of the Zarr v3 spec and ZEPs:
Regular Grid#
The regular grid models are designed to represent a rectangular and regularly paced chunk grid.
Represents a rectangular and regularly spaced chunk grid. |
|
Represents regular chunk sizes along each dimension. |
For 1D array with size = 31
, we can divide it into 5 equally sized
chunks. Note that the last chunk will be truncated to match the size of the array.
{ "name": "regular", "configuration": { "chunkShape": [7] } }
Using the above schema resulting array chunks will look like this:
←─ 7 ─→ ←─ 7 ─→ ←─ 7 ─→ ←─ 7 ─→ ↔ 3
┌───────┬───────┬───────┬───────┬───┐
└───────┴───────┴───────┴───────┴───┘
For 2D array with shape rows, cols = (7, 17)
, we can divide it into 9
equally sized chunks.
{ "name": "regular", "configuration": { "chunkShape": [3, 7] } }
Using the above schema, the resulting 2D array chunks will look like below. Note that the rows and columns are conceptual and visually not to scale.
←─ 7 ─→ ←─ 7 ─→ ↔ 3
┌───────┬───────┬───┐
│ ╎ ╎ │ ↑
│ ╎ ╎ │ 3
│ ╎ ╎ │ ↓
├╶╶╶╶╶╶╶┼╶╶╶╶╶╶╶┼╶╶╶┤
│ ╎ ╎ │ ↑
│ ╎ ╎ │ 3
│ ╎ ╎ │ ↓
├╶╶╶╶╶╶╶┼╶╶╶╶╶╶╶┼╶╶╶┤
│ ╎ ╎ │ ↕ 1
└───────┴───────┴───┘
Rectilinear Grid#
The RectilinearChunkGrid model extends the concept of chunk grids to accommodate rectangular and irregularly spaced chunks. This model is useful in data structures where non-uniform chunk sizes are necessary. RectilinearChunkShape specifies the chunk sizes for each dimension as a list allowing for irregular intervals.
Represents a rectangular and irregularly spaced chunk grid. |
|
Represents irregular chunk sizes along each dimension. |
Note
It’s important to ensure that the sum of the irregular spacings specified
in the chunkShape
matches the size of the respective array dimension.
For 1D array with size = 39
, we can divide it into 5 irregular sized
chunks.
{ "name": "rectilinear", "configuration": { "chunkShape": [[10, 7, 5, 7, 10]] } }
Using the above schema resulting array chunks will look like this:
←── 10 ──→ ←─ 7 ─→ ← 5 → ←─ 7 ─→ ←── 10 ──→
┌──────────┬───────┬─────┬───────┬──────────┐
└──────────┴───────┴─────┴───────┴──────────┘
For 2D array with shape rows, cols = (7, 25)
, we can divide it into 12
rectilinear (rectangular bur irregular) chunks. Note that the rows and columns are
conceptual and visually not to scale.
{ "name": "rectilinear", "configuration": { "chunkShape": [[3, 1, 3], [10, 5, 7, 3]] } }
←── 10 ──→ ← 5 → ←─ 7 ─→ ↔ 3
┌──────────┬─────┬───────┬───┐
│ ╎ ╎ ╎ │ ↑
│ ╎ ╎ ╎ │ 3
│ ╎ ╎ ╎ │ ↓
├╶╶╶╶╶╶╶╶╶╶┼╶╶╶╶╶┼╶╶╶╶╶╶╶┼╶╶╶┤
│ ╎ ╎ ╎ │ ↕ 1
├╶╶╶╶╶╶╶╶╶╶┼╶╶╶╶╶┼╶╶╶╶╶╶╶┼╶╶╶┤
│ ╎ ╎ ╎ │ ↑
│ ╎ ╎ ╎ │ 3
│ ╎ ╎ ╎ │ ↓
└──────────┴─────┴───────┴───┘