I'm not sure how helpful this would be generally, but a lot of ML APIs restrict input arrays to matrices. It'd be kind of nice if we could support at least a subset of the reshape behaviour such that axis keys are merged. For example:
julia> ka = KeyedArray(rand(4, 3, 2); time=1:4, obj=[:a, :b, :c], loc=[:x, :y])
3-dimensional KeyedArray(NamedDimsArray(...)) with keys:
↓ time ∈ 4-element UnitRange{Int64}
→ obj ∈ 3-element Vector{Symbol}
□ loc ∈ 2-element Vector{Symbol}
And data, 4×3×2 Array{Float64,3}:
[:, :, 1] ~ (:, :, :x):
(:a) (:b) (:c)
(1) 0.416197 0.327252 0.14608
(2) 0.706717 0.0045184 0.055459
(3) 0.487265 0.879403 0.121894
(4) 0.156394 0.431853 0.0756667
[:, :, 2] ~ (:, :, :y):
(:a) (:b) (:c)
(1) 0.507 0.803645 0.411088
(2) 0.92779 0.284998 0.418833
(3) 0.137591 0.415834 0.194712
(4) 0.785161 0.436941 0.996514
julia> reshape(ka, 4, :)
4×6 Array{Float64,2}:
0.416197 0.327252 0.14608 0.507 0.803645 0.411088
0.706717 0.0045184 0.055459 0.92779 0.284998 0.418833
0.487265 0.879403 0.121894 0.137591 0.415834 0.194712
0.156394 0.431853 0.0756667 0.785161 0.436941 0.996514
I feel like in these cases it would be nice if we could get something like:
julia> KeyedArray(reshape(ka, 4, :); time=1:4, obj_loc=[:a_x, :b_x, :c_x, :a_y, :b_y, :c_y])
2-dimensional KeyedArray(NamedDimsArray(...)) with keys:
↓ time ∈ 4-element UnitRange{Int64}
→ obj_loc ∈ 6-element Vector{Symbol}
And data, 4×6 Array{Float64,2}:
(:a_x) (:b_x) (:c_x) (:a_y) (:b_y) (:c_y)
(1) 0.416197 0.327252 0.14608 0.507 0.803645 0.411088
(2) 0.706717 0.0045184 0.055459 0.92779 0.284998 0.418833
(3) 0.487265 0.879403 0.121894 0.137591 0.415834 0.194712
(4) 0.156394 0.431853 0.0756667 0.785161 0.436941 0.996514
Either with reshape directly or at least with a separate, more restrictive, function call. If this seems like it could be useful for other folks I'm happy to open a PR with a suggested function name?
I'm not sure how helpful this would be generally, but a lot of ML APIs restrict input arrays to matrices. It'd be kind of nice if we could support at least a subset of the
reshapebehaviour such that axis keys are merged. For example:I feel like in these cases it would be nice if we could get something like:
Either with reshape directly or at least with a separate, more restrictive, function call. If this seems like it could be useful for other folks I'm happy to open a PR with a suggested function name?