【问题标题】:How do I organize complex data in julia如何在 Julia 中组织复杂的数据
【发布时间】:2015-11-05 03:38:26
【问题描述】:

几天前我决定尝试 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

编译器似乎无法获得关于phonons 是什么的太多信息。所以我的问题是:Julia 人如何组织他们的复杂数据?

【问题讨论】:

  • 如何使用composite type 和 zip D
  • 我试过了,但D['onsite'] 仍然是Array{Any, 1}。然后我必须定义另一个复合类型。听起来不太好。
  • 你的 numpy 数组是什么样子的?
  • @GnimucKey,都是固定大小的方阵。

标签: julia


【解决方案1】:

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

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 数组的元素类型 <: number>T<:Union{Int64, Float64} 之类的东西。

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

julia> typejoin(Array, Dict)
Any

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

【讨论】:

    猜你喜欢
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    相关资源
    最近更新 更多