2016-08-26 1 views
1

나는 Julia를 처음 사용하는데, 제 질문이 너무 사소하지 않기를 바랍니다. Float64의 다양한 열과 ASCIIString의 한 열을 포함하는 FITS 이진 테이블을 만들려고합니다. FITSIO.jl documentation에서 설명했듯이 write() 함수에 대한 입력은 ASCIIString 키 (열 이름 지정)와 Array 값 (각 열에 쓸 데이터 제공)이있는 사전이어야합니다. ".Julia FITSio : Float64 및 ASCIIString이있는 FITS 테이블

그러나 사전 혼합 유형을 물을 수 없습니다 것 같다, 나는 다음과 같은 오류 얻을 :

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 

은 사람이 만드는 방법을 알고 있습니까 혼합 유형의 열을 포함한 테이블에 적합, 특히 Float64 및 ASCIIString의를 ? 문제가없는 동일한 FITSIO.jl 라이브러리로 이러한 테이블을 읽을 수 있기 때문에 가능할 것입니다. 그러나 설명서의 제한된 예제는 그런 경우를 부정적으로 보지 않습니다.

감사합니다.

+1

v5.5에서는 'ASCIIString'이 더 이상 사용되지 않으므로 새로운 코드를 작성하는 경우이 유형을 피하십시오. –

답변

2

중괄호를 괄호로 변경하면 원하는 목록이 생성됩니다.

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 
+0

대단하다. 나는 더 조심해야만했다! 이제 다른 문제가 있습니다. 기존 사전에 문자열 열을 추가하려고하면 다시 깨집니다. data = Dict ("col1"=> [1., 2., 3..], "col2"=> [4., 5., []]) 데이터 [ "col3"] = [ "toto", "tata", "titi"] 유형에 대해 불평하면 ... 가능한지 전혀 생각하지 않으십니까? 고맙습니다! – HBouy

+0

처음 두 쌍만 사용하여 초기화하면 julia는이 사전이 String/Array-of-floats 쌍을 취하는 것으로 특히 추측합니다 (즉, Dict {String, Array {Float64, 1}} 줄리아 추론을하기 위해 (String => String) 쌍을 float와 동시에 추가하십시오. 줄리아 추론을 할 수 없다면 'Any', * 또는 * 형식의 배열이며, 그렇지 않으면 하나 (예 :'data (예를 들어'data = Dict {String, Array {Any, 1}} (<쌍들의 순서>)를 초기화 할 때 명시 적으로 타입을 만들거나 ') –

+0

완벽, 그거야! 다시 고마워. – HBouy