【问题标题】:Julia FITSio: FITS table with Float64 and ASCIIStringJulia FITSio:带有 Float64 和 ASCIIString 的 FITS 表
【发布时间】:2016-08-26 08:51:08
【问题描述】:

我是 Julia 的新手,我希望我的问题不是太琐碎。 我尝试创建一个 FITS 二进制表,其中包括 Float64 的各种列和 ASCIIString 的一列。正如FITSIO.jl documentation 中所述,write() 函数的输入应该是“具有 ASCIIString 键(给出列名)和数组值(给出要写入每一列的数据)的字典” .

但字典似乎不能容纳混合类型,我收到以下错误:

data=Dict{"col1"=>[1.0,2.0,3.0], "col2"=>[4.0,5.0,6.0],"col3"=>["toto","tata","titi"]}
LoadError: TypeError: Dict: in parameter, expected Type{T}, got Pair{ASCIIString,Array{Float64,1}} while loading In[408], in expression starting on line 1

有谁知道如何创建包含混合类型列的 FITS 表,尤其是 Float64 和 ASCIIString? 这应该是可能的,因为我可以毫无问题地使用相同的 FITSIO.jl 库读取这样的表,但文档中的有限示例并不能说明这种情况。

谢谢!

【问题讨论】:

  • 请注意,ASCIIString 在 v0.5 中已被弃用...因此,如果您正在编写任何新代码,请尽量避免使用这种类型。

标签: julia astronomy


【解决方案1】:

将大括号更改为括号,您将创建您想要的列表。

data=Dict("col1"=>[1.,2.,3.], "col2"=>[4.,5.,6.], "col3"=>["toto","tata","titi"])

您实际上是在使用一系列对调用Dict 类型的构造函数。



额外信息:
大括号完全是另一回事。它用于指定字典键和值应该是(或转换为,如果可能的话)特定类型。例如

julia> Dict{String,Array{Float64,1}}("a"=>[1.,2.,3.], "b"=>[4.,5.,6.])
Dict{String,Array{Float64,1}} with 2 entries:
  "b" => [4.0,5.0,6.0]
  "a" => [1.0,2.0,3.0]

julia> Dict{String,Array{Float64,1}}("a"=>[1.,2.,3.], "b"=>['a','b','c'])
Dict{String,Array{Float64,1}} with 2 entries:
  "b" => [97.0,98.0,99.0]
  "a" => [1.0,2.0,3.0]

julia> Dict{String,Array{Float64,1}}("a"=>[1.,2.,3.], "b"=>["a","b","c"])
ERROR: MethodError: Cannot `convert` an object of type String to an object of type Float64

【讨论】:

  • 太棒了,我应该更加小心!现在我有另一个问题。如果我尝试将 String 列添加到现有 Dictionary 中,它会再次中断: data=Dict("col1"=>[1.,2.,3.], "col2"=>[4.,5.,6 .]) data["col3"]=["toto","tata","titi"] 抱怨类型......知道这是否可能吗?谢谢!
  • 如果你只用前两对初始化它,julia 会推断这个字典特别是一个接受字符串/浮点数组对的字典(即它推断类型Dict{String, Array{Float64, 1}}。要么添加(String=>String) 对与浮点数同时进行,以使 julia 推断它是 Any 类型的数组,如果不能,则将其转换为一个(例如data = convert(Dict{String,Array{Any,1}}, data)) 或在初始化时明确类型(例如data = Dict{String, Array{Any,1}}(<sequence of pairs>)
  • 很高兴。当您使用它时,请看一下以下功能,如果您还没有意识到它们,我相信您会发现它们对使用字典很有用:haskeygetget!@987654331 @push!delete!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-16
  • 1970-01-01
相关资源
最近更新 更多