Julia FITSio:带有Float64和ASCIIString

时间:2016-08-26 08:51:09

标签: julia astronomy

我是朱莉娅的新手,我希望我的问题不是太微不足道。 我尝试创建一个FITS二进制表,其中包括各种Float64列和一列ASCIIString。正如FITSIO.jl documentation中所解释的,write()函数的输入应该是" 带有ASCIIString键的字典(给出列名)和Array值(给每个列写入数据) &#34 ;.

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

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库的这样的表,但是文档中的有限示例并没有说明这种情况。

谢谢!

1 个答案:

答案 0 :(得分:2)

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

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

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


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

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