Сохранение массивов разной длины в одном фрейме данных в 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 ответ:
Здесь, вероятно, лучше всего было бы просто использовать"высокий"/"длинный"/" аккуратный " набор данных, в котором вы храните номер моделирования в одном векторе, а вертикально сложенные результаты в другом (и, возможно, индексы в третьем).
Но чтобы достичь того, что вы хотите, я просто сохраню выходные данные непосредственно в вектор
DataArray
s. затем вы можете изменить их размер до размера самого большого в конце: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 │ ⋮