如何在julia中组织复杂数据

时间:2015-11-05 03:38:27

标签: julia

我几天前决定尝试julia并尝试将我的一个python项目翻译成julia。我知道使用类型系统对于良好的性能至关重要。但是,我在python中有这样的东西:

class Phonon(object):
    # it has an attribute called D which looks like
    # D = {'on_site': [D00, D11, D22, D33 ...], 'lead':{'l': [Dl00, Dl01, Dl11], 'r': [Dr00, Dr01, Dr11]},'couple': [D01, D12, D23 ...], 'lead_center':{'l': Dlcl, 'r': Dlcr}}
    # all D00, D11, D22 matrices are numpy arrays

如果我把它翻译成朱莉娅,那就是:

type Phonon:
    D::Dict{ASCIIString, Any}
end

似乎编译器无法获得有关phonon是什么的更多信息。所以我的问题是:朱莉亚人如何组织他们的复杂数据?

1 个答案:

答案 0 :(得分:3)

如果我理解你,你可能想要这样的东西:

type PhononDict{T<:Number}
    on_site::Vector{Matrix{T}}
    lead::Dict{ASCIIString, Vector{Matrix{T}}}
    couple::Vector{Matrix{T}}
    lead_center::Dict{ASCIIString, Matrix{T}}
end

我假设您的numpy数组的元素类型&lt ;: Number,您可以将其调整为类似T<:Union{Int64, Float64}的内容。

这里的关键问题是lead::Dict,所以D::Dict{ASCIIString, Any}

julia> typejoin(Array, Dict)
Any

我建议将D更改为复合类型,然后您可以将更多信息传递给编译器。有关parametric types的更多信息。