-
Notifications
You must be signed in to change notification settings - Fork 29
Open
Description
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?
Metadata
Metadata
Assignees
Labels
No labels