Juliaに、希望するタイプの配列のコピーを返す関数、つまり numpys astype function に相当するものはありますか? 「Any」タイプの配列があり、それをFloat配列に変換したい。私は試した:
new_array = Float64(array)
しかし、私は次のエラーを受け取ります
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
配列を通過して各要素のfloat値を返す関数を作成するだけですが、これを行う組み込みのメソッドがない場合は少し奇妙です。
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
以下を使用できます。
new_array = Array{Float64}(array)
ブロードキャスト演算子.
を使用することもできます。
a = Any[1.2, 3, 7]
Float64.(a)
ダニエルとランディの答えはしっかりしています。複雑な反復ケースを比較的簡潔にすることができるので、ここで私が好きな別の方法を追加します。そうは言っても、変換/型宣言に関連する他の回答ほど効率的ではありません。しかし、構文は他のユースケースにかなり簡単に拡張できるため、追加する価値があります。
a = Array{Any,1}(Rand(1000))
f = [float(a[i]) for i = 1:size(a,1)]