DimensionalData
[!TIP] 请访问最新文档:https://rafaqz.github.io/DimensionalData.jl/dev/
DimensionalData.jl 提供了用于处理具有命名维度(可选地带有查找索引)的数据集的工具和抽象。它提供了零开销的命名索引抽象以及快速的索引查找。
DimensionalData 是 AxisArrays.jl 的可插拔、通用化版本,具有更简洁的语法,并包含在 NamedDims.jl 中发现的额外功能。其目标与 Python 的 xarray 相似,主要编写用于在 Rasters.jl 中处理空间数据。
安装
julia>]
pkg> add DimensionalData
快速入门
开始使用该包:
using DimensionalData
创建维度数组(DimArray)的基本语法是:
A = DimArray(rand(50, 31), (X(), Y(10.0:40.0)));
或者直接使用 rand,这对于 zeros、ones 和 fill 同样有效:
A = rand(X(10), Y(10.0:20.0))
╭───────────────────────────╮
│ 10×11 DimArray{Float64,2} │
├───────────────────────────┴──────────────────────────────── dims ┐
↓ X,
→ Y Sampled{Float64} 10.0:1.0:20.0 ForwardOrdered Regular Points
└──────────────────────────────────────────────────────────────────┘
10.0 11.0 12.0 13.0 14.0 … 16.0 17.0 18.0 19.0 20.0
0.71086 0.689255 0.672889 0.766345 0.00277696 0.773863 0.252199 0.279538 0.808931 0.783528
0.934464 0.815631 0.815715 0.890573 0.158584 0.304733 0.936321 0.499803 0.839926 0.979722
⋮ ⋱ ⋮
0.935495 0.460879 0.0218015 0.703387 0.756411 … 0.431141 0.619897 0.0536918 0.506488 0.170494
0.800226 0.208188 0.512795 0.421171 0.492668 0.238562 0.4694 0.320596 0.934364 0.147563
[!NOTE] 按索引进行子集划分很简单:
A[Y=1:10, X=1]
╭────────────────────────────────╮
│ 10-element DimArray{Float64,1} │
├────────────────────────────────┴─────────────────────────── dims ┐
↓ Y Sampled{Float64} 10.0:1.0:19.0 ForwardOrdered Regular Points
└──────────────────────────────────────────────────────────────────┘
10.0 0.130198
11.0 0.693343
12.0 0.400656
⋮
17.0 0.877581
18.0 0.866406
19.0 0.605331
也可以通过查找进行子集化,使用 Selector,让我们尝试 At:
A[Y(At(25))]
╭────────────────────────────────╮
│ 50-element DimArray{Float64,1} │
├────────────────────────── dims ┤
↓ X
└────────────────────────────────┘
1 0.5318
2 0.212491
3 0.99119
4 0.373549
5 0.0987397
⋮
46 0.503611
47 0.225421
48 0.293564
49 0.976395
50 0.622586
此外,还有 Near(用于不精确/最近选择)、Contains(用于包含 Intervals 的值)、
Between 或 .. 用于范围选择,以及 Where 用于查询等。
使用 Makie.jl 进行绘图非常简单:
using GLMakie, DimensionalData
boxplot(rand(X('a':'d'), Y(2:5:20)))
并且该图将具有正确的刻度线和标签。
[!NOTE] 最近的更改已大幅减少了导出的 API。
之前导出的方法可以通过 using
它们被移动到的子模块引入全局作用域 - Lookup 和 Dimensions:
using DimensionalData
using DimensionalData.Lookup, DimensionalData.Dimensions
替代软件包
在这个领域有许多类似的 Julia 软件包。AxisArrays.jl、NamedDims.jl、NamedArrays.jl 是已注册的替代方案,它们各自覆盖了 DimensionalData.jl 提供的部分功能。DimensionalData.jl 应该能够复制它们的大部分语法和功能。
AxisKeys.jl 和 AbstractIndices.jl 是其他一些有趣的发展。有关为何存在如此多类似选项以及未来方向的更多细节,请阅读此 thread。
主要功能在此处说明,但完整的功能列表 列于 API 页面。