2016-02-18 48 views
8

Juliaに、配列のコピーを希望の型、つまりnumpys astype functionに戻す関数がありますか?私は "Any"型の配列を持っていて、それをFloat配列に変換したい。私が試した:Julia配列のデータ型を「Any」から「Float64」に変更するにはどうすればよいですか?

new_array = Float64(array) 

が、私はちょうど、アレイを通過し、各要素のfloat値を返す関数を書くことができます

LoadError: MethodError: `convert` has no method matching 
convert(::Type{Float64}, ::Array{Any,2}) 
This may have arisen from a call to the constructor Float64(...), 
since type constructors fall back to convert methods. 
Closest candidates are: 
    call{T}(::Type{T}, ::Any) 
    convert(::Type{Float64}, !Matched::Int8) 
    convert(::Type{Float64}, !Matched::Int16) 
    ... 
    while loading In[140], in expression starting on line 1 

    in call at essentials.jl:56 

次のエラーを取得しますが、私はそれは少し奇妙見つけますこれを行うための組み込みメソッドがない場合

答えて

7

あなたは使用することができます。

new_array = Array{Float64}(array)

11

使用convertを。最初の配列に使用した構文に注意してください。配列が作成される前に必要なものが分かっている場合は、型を角括弧の前に宣言することができます。 Anyと同様に簡単にFloat64に置き換えられ、convert機能が不要になりました。ダニエルとランディの答えが固体である

julia> a = Any[1.2, 3, 7] 
3-element Array{Any,1}: 
1.2 
3 
7 

julia> convert(Array{Float64,1}, a) 
3-element Array{Float64,1}: 
1.2 
3.0 
7.0 
1

は、私はちょうどそれが比較的簡潔な、より複雑な反復例を作ることができるので、私は好きでここに別の方法を追加します。言い換えれば、より具体的に変換/型宣言に関連する他の答えほど効率的ではありません。しかし、構文はかなり簡単に、それは追加の価値が他のユースケースに拡張することができるので:

a = Array{Any,1}(rand(1000)) 
f = [float(a[i]) for i = 1:size(a,1)] 
+1

を変換する文字列エントリはから読んだとき、私はこのアプローチを使用しましたCSVを直接入力して、i = 1:length(t4)]に対して値 't4new = [parse(t4 [i])を取得します。これは、あなたの使用が拡張可能であると予想したときに必要なint値の配列を私に与えます。 – Vass

1

ます。また、放送事業者.使用することができます。

a = Any[1.2, 3, 7] 
Float64.(a) 
関連する問題