我几天前决定尝试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
是什么的更多信息。所以我的问题是:朱莉亚人如何组织他们的复杂数据?
答案 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的更多信息。