#julia
Вопрос:
У меня есть массив NamedTuple, который я прочитал из файла hdf5 в Julia. У него есть имена X, Y и Z. Есть ли краткий способ преобразовать это в три массива, содержащих значения X, Y и Z соответственно?
typeof(science_h5["/Nav/Position"][:])
Array{NamedTuple{(:X, :Y, :Z),Tuple{Float32,Float32,Float32}},1}
Ответ №1:
Вы можете использовать Tables.columntable
из таблиц.jl:
julia> a = [(X=i, Y=i 1, Z=i 2) for i in 1:5]
5-element Vector{NamedTuple{(:X, :Y, :Z), Tuple{Int64, Int64, Int64}}}:
(X = 1, Y = 2, Z = 3)
(X = 2, Y = 3, Z = 4)
(X = 3, Y = 4, Z = 5)
(X = 4, Y = 5, Z = 6)
(X = 5, Y = 6, Z = 7)
julia> Tables.columntable(a)
(X = [1, 2, 3, 4, 5], Y = [2, 3, 4, 5, 6], Z = [3, 4, 5, 6, 7])
Если вы хотите использовать только базу Julia, вы могли бы сделать:
julia> X, Y, Z = [getindex.(a, i) for i in 1:3]
3-element Vector{Vector{Int64}}:
[1, 2, 3, 4, 5]
[2, 3, 4, 5, 6]
[3, 4, 5, 6, 7]
или
julia> X, Y, Z = [getproperty.(a, i) for i in (:X, :Y, :Z)]
3-element Vector{Vector{Int64}}:
[1, 2, 3, 4, 5]
[2, 3, 4, 5, 6]
[3, 4, 5, 6, 7]