Сохранение массивов разной длины в одном фрейме данных в Julia


Я хочу сохранить результаты моделирования, которое выводит массив переменной длины. Обычно я запускаю моделирование, сохраняю его в массиве, объединяю его с массивом с предыдущими результатами,а затем сохраняю массив, который имеет все результаты, создавая фрейм данных и затем используя CSV.писать. Однако, поскольку массивы имеют переменную длину, hcat () не будет работать. Ниже приведен игрушечный пример того, что я хотел бы сделать.

output = zeros(5)
number_simulations = 10
for i = 1:number_simulations
    l = sample([4, 5, 6, 7])
    print(l)
    for j = 1:l
        new_out = zeros(l)
        hcat(output, new_out)
    end    
end
df = convert(DataFrame, output)
CSV.write("out.csv", df)

Это возвращает ошибку

DimensionMismatch("vectors must have same lengths").

Существует ли простой обходной путь, который позволит ли мне иметь файл с результатами каждого моделирования в отдельных столбцах?

1 2

1 ответ:

Здесь, вероятно, лучше всего было бы просто использовать"высокий"/"длинный"/" аккуратный " набор данных, в котором вы храните номер моделирования в одном векторе, а вертикально сложенные результаты в другом (и, возможно, индексы в третьем).

Но чтобы достичь того, что вы хотите, я просто сохраню выходные данные непосредственно в вектор DataArrays. затем вы можете изменить их размер до размера самого большого в конце:

julia> output = DataVector{Float64}[]
       number_simulations = 10
       for i = 1:number_simulations
           l = sample([4, 5, 6, 7])
           print(l)
           for j = 1:l
               push!(output, zeros(l)) # This converts the array to a DataVector
           end
       end
5746656565
julia> resize!.(output, maximum(length, output))
       DataFrame(output)
7×55 DataFrames.DataFrame
│ Row │ x1  │ x2  │ x3  │ x4  │ x5  │ x6  │ x7  │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ 1   │ 0.0 │ 0.0 │ 0.0 │ 0.0 │ 0.0 │ 0.0 │ 0.0 │
│ 2   │ 0.0 │ 0.0 │ 0.0 │ 0.0 │ 0.0 │ 0.0 │ 0.0 │
│ 3   │ 0.0 │ 0.0 │ 0.0 │ 0.0 │ 0.0 │ 0.0 │ 0.0 │
│ 4   │ 0.0 │ 0.0 │ 0.0 │ 0.0 │ 0.0 │ 0.0 │ 0.0 │
│ 5   │ 0.0 │ 0.0 │ 0.0 │ 0.0 │ 0.0 │ 0.0 │ 0.0 │
│ 6   │ NA  │ NA  │ NA  │ NA  │ NA  │ 0.0 │ 0.0 │
│ 7   │ NA  │ NA  │ NA  │ NA  │ NA  │ 0.0 │ 0.0 │

⋮