Julia 朱莉娅·菲西奥:用浮动64和ascistring调整桌子

Julia 朱莉娅·菲西奥:用浮动64和ascistring调整桌子,julia,astronomy,Julia,Astronomy,我是朱莉娅的新手,我希望我的问题不要太琐碎。 我尝试创建一个FITS二进制表,其中包括不同的Float64列和一列ascistring。如中所述,write()函数的输入应该是“一个具有IString键(提供列名)和数组值(提供要写入每列的数据)的字典” 但字典似乎不能容纳混合类型,我得到以下错误: data=Dict{"col1"=>[1.0,2.0,3.0], "col2"=>[4.0,5.0,6.0],"col3"=>["toto","tata","titi"]} Loa

我是朱莉娅的新手,我希望我的问题不要太琐碎。 我尝试创建一个FITS二进制表,其中包括不同的Float64列和一列ascistring。如中所述,write()函数的输入应该是“一个具有IString键(提供列名)和数组值(提供要写入每列的数据)的字典”

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

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和ascistring吗? 这应该是可能的,因为我可以毫无问题地使用相同的FITSIO.jl库阅读这样一个表,但是文档中的有限示例并不不适合这种情况


谢谢大家!

将大括号更改为括号,您将创建所需的列表

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,数组{Float64,1}},有2个条目:
“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,数组{Float64,1}},有2个条目:
“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”])
错误:MethodError:无法将String类型的对象“转换”为Float64类型的对象

请注意,
ascistring
在v0.5中被弃用。。。因此,如果您正在编写任何新代码,请尽量避免使用这种类型。太好了,我应该更加小心!现在我有另一个问题。如果我试图将字符串列添加到现有字典中,它会再次中断:data=Dict(“col1”=>[1,2,3.],“col2”=>[4,5,6.])data[“col3”]=[“toto”,“tata”,“titi”]抱怨类型。。。知道这是否可能吗?非常感谢。如果您仅使用前两个对初始化它,julia将推断此字典是专门采用字符串/浮点数组对的字典(即,它推断类型
Dict{String,Array{Float64,1}}
)与浮点数同时配对,使julia推断它是类型为
Any
,或者如果不能,则将其转换为一个(例如
data=convert(Dict{String,array{Any,1}},data)
),或者在初始化时使类型显式(例如
data=Dict{String,array{Any 1}()
)很高兴。当您使用它的时候,看看下面的函数,如果您还不知道它们的话,我相信您会发现它们对使用字典很有用:
haskey
get
get!
getkey
推送!
删除!