У меня есть Юлия TimeArray, скажем, ta
, и я хочу построить sub_array TimeArray sub_ta
, извлекая некоторые столбцы. Некоторое время спустя go я использовал симулятор кода для минимального примера ниже, но который больше не работает
import TimeSeries
import Dates
dates_index = [ Dates.Date(1970,1,day) for day in [1,2,3,4,5] ]
values = [ [1.0 2.0 3.0 4.0 5.0] ; [10.0 20.0 30.0 40.0 50.0] ; [ 100.0 200.0 300.0 400.0 500.0] ]
ta = TimeSeries.TimeArray( dates_index, transpose(values), [ :col1, :col2, :col3 ] )
sub_ta = ta[ [ :col1 , :col2 ] ]
ERROR: MethodError: no method matching getindex(::TimeSeries.TimeArray{Float64,2,Dates.Date,LinearAlgebra.Transpose{Float64,Array{Float64,2}}}, ::Array{Symbol,1})
Closest candidates are:
getindex(::TimeSeries.TimeArray, ::Integer) at /home/guilhem/.julia/packages/TimeSeries/bbwst/src/timearray.jl:259
getindex(::TimeSeries.TimeArray, ::UnitRange{#s30} where #s30<:Integer) at /home/guilhem/.julia/packages/TimeSeries/bbwst/src/timearray.jl:268
getindex(::TimeSeries.TimeArray, ::AbstractArray{#s30,1} where #s30<:Integer) at /home/guilhem/.julia/packages/TimeSeries/bbwst/src/timearray.jl:276
Что мне кажется странным, так это то, что в источнике библиотеки TimeSeries есть источник (в файле timearray.jl) функция getindex, которая должна работать, если мы хотим работать со многими столбцами.
# array of columns by name
function getindex(ta::TimeArray, ss::Symbol...)
ns = [findcol(ta, s) for s in ss]
TimeArray(timestamp(ta), values(ta)[:, ns], collect(ss), meta(ta))
end
Но я думаю, что я не смог правильно использовать ее, вероятно, из-за Оператор сплата, который я на самом деле не освоил
, проблема как на julia-1.1.0, так и на julia-1.3.1, с TimeSeries v0.14.0