如何在Julia中存储具有树状结构的数据

时间:2014-08-29 06:58:41

标签: arrays object julia

我希望在Julia中使用它时将高频财务数据存储在内存中。

我的数据存在于很多Float64数组中。在某些市场上,为了某种安全性,每个阵列都存储一天内的高频数据。例如,对于在纽约证券交易所(纽约证券交易所)上市的IBM 2010-01-04日期,有一个Float64数组。

如上所述,我有许多这样的阵列,涵盖多个日期,市场和证券。我想将它们全部存储在一个对象中,这样很容易检索任何给定的数组(可能利用元数据的树状结构)。

在Matlab中,我曾经将它存储在一个结构中,其中第一级是市场,下一级是安全,下一级是日期,然后在树的末尾是相应的数组。在每个级别,我还存储了该级别的字段列表。

Julia doesn't really have an equivalent to Matlab structures,那么朱莉娅最好的方法是什么?

目前,我能想到的最好的是一系列嵌套复合类型,每个类型都有两个字段。例如:

type HighFrequencyData
    dateList::Array{Date, 1}
    dataArray::Array{Any, 1}
end

其中dateList存储与dataArray中保存的Float64数组序列对应的日期列表(即dateListdataArray将具有相同的长度)。然后:

type securitiesData
    securityList::Array{String, 1}
    highFrequencyArray::Array{Any, 1}
end

其中securityList存储与HighFrequencyData中保存的highFrequencyArray类型序列对应的证券列表。然后:

type marketsData
    marketList::Array{String, 1}
    securitiesArray::Array{Any, 1}
end

其中marketList存储与securitiesData中保存的securitiesArray类型序列对应的市场列表。

鉴于此,所有数据现在都可以存储在marketsData类型的变量中,并使用marketListsecurityListdateList在每个级别进行查找嵌套。

但这感觉有点麻烦......

1 个答案:

答案 0 :(得分:5)

您的类型层次结构看起来没问题,但是您可能只需要词典吗?

all_data = ["Market1" => {
             ["Sec1" => {[20140827, 20140825], [1.05, 10.6]}],
             ["Sec2" => {[20140827, 20140825], [1.05, 10.6]}]},
            "Market2" => {
             ["Sec1" => {[20140827, 20140825], [1.05, 10.6]}],
             ["Sec2" => {[20140827, 20140825], [1.05, 10.6]}]},
            ...]

println(all_data["Market1"]["Sec1"] ./ all_data["Market2"]["Sec1"])

如果您可以发布可能有用的MATLAB代码。

我会稍微重新制定你的类型,或许更简单的类似

type TimeSeries
    dates::Vector{Date}
    data::Vector{Any}
end

typealias Security (String,TimeSeries)
typealias Market Vector{Security}

markets = Market[]

push!(markets, [("Sec1",TimeSeries(...)), ("Sec2",TimeSeries(...)])

另外,请务必查看https://github.com/JuliaStats/TimeSeries.jl