Юлия: добавьте пустой вектор

Я хотел бы создать пустой вектор и добавить к нему массив в Julia. Как это сделать?

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

приводит к

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

Спасибо.

Ответ 1

Ваша переменная x не содержит массив, а тип.

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

Вы можете создать массив как Array(Float64, n) (но будьте осторожны, он не инициализирован: он содержит произвольные значения) или zeros(Float64, n), где n - желаемый размер.

Так как Float64 по умолчанию, мы можем его оставить. Ваш пример будет выглядеть следующим образом:

x = zeros(0)
append!( x, rand(10) )

Ответ 2

Вы можете инициализировать пустой вектор любого типа, набрав тип перед []. Как:

Float64[] # Returns what you want
Array{Float64, 2}[] # Vector of Array{Float64,2}
Any[] # Can contain anything

Ответ 3

Новый ответ для Юлии 1. добавь! устарела, теперь вам нужно использовать push! (массив, элемент) для добавления элементов в массив

my_stuff = zeros()
push!(my_stuff, "new element")

Ответ 4

Я несколько новичок в Юлии и столкнулся с этим вопросом после получения аналогичной ошибки. Чтобы ответить на первоначальный вопрос для 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!:

Согласно справке Джулии, push! используется для добавления отдельных элементов в коллекцию, а append! добавляет коллекцию элементов в коллекцию. Итак, следующие фрагменты кода создают один и тот же массив:

Нажмите отдельные элементы:

a = Vector{Float64}()
push!(a, 1.0)
push!(a, 2.0)

Добавить элементы, содержащиеся в массиве:

a = Vector{Float64}()
append!(a, [1.0, 2.0])