web-dev-qa-db-ja.com

ジュリア:空のベクターに追加

空のベクターを作成し、それにJuliaの配列を追加したいと思います。それ、どうやったら出来るの?

x = Vector{Float64}
append!(x, Rand(10))

結果は

`append!` has no method matching append!(::Type{Array{Float64,1}}, ::Array{Float64,1})

ありがとう。

18
Anarcho-Chossid

変数xには配列ではなく型が含まれています。

_x = Vector{Float64}
typeof(x)  # DataType
_

配列はArray(Float64, n)(ただし、初期化されていないため、任意の値が含まれます)またはzeros(Float64, n)として作成できます。ここで、nは目的のサイズです。

_Float64_がデフォルトなので、省略できます。あなたの例は次のようになります:

_x = zeros(0)
append!( x, Rand(10) )
_
25

[]の前に型を入力することにより、任意の型の空のベクターを初期化できます。お気に入り:

Float64[] # Returns what you want
Array{Float64, 2}[] # Vector of Array{Float64,2}
Any[] # Can contain anything
10
Daniel Høegh

私はジュリアにやや初心者で、同様のエラーが発生した後、この質問に出くわしました。 Juliaバージョン1.2.0の元の質問に答えるために、不足しているのは_()_だけです。

_x = Vector{Float64}()
append!(x, Rand(10))
_

このソリューションは(x=zeros(0)とは異なり)、他のデータ型でも機能します。たとえば、辞書を保存するための空のベクターを作成するには、以下を使用します。

_d = Vector{Dict}()
Push!(d, Dict("a"=>1, "b"=>2))
_

_Push!_および_append!_の使用に関する注意:

Juliaのヘルプによると、_Push!_は個々のアイテムをコレクションに追加するために使用され、_append!_はアイテムのコレクションをコレクションに追加します。したがって、次のコードは同じ配列を作成します。

個別のアイテムをプッシュ:

_a = Vector{Float64}()
Push!(a, 1.0)
Push!(a, 2.0)
_

配列に含まれるアイテムを追加する:

_a = Vector{Float64}()
append!(a, [1.0, 2.0])
_
8
japamat

ジュリア1の新しい答え、追加!は非推奨です。要素を配列に追加するには、Push!(array、element)を使用する必要があります

my_stuff = zeros()
Push!(my_stuff, "new element")
4
chasmani