在Julia中预分配已知大小的数据框

时间:2015-02-23 03:23:31

标签: julia

当我运行模拟时,我喜欢初始化一个大的空数组,并在模拟迭代结束时将其填满。我这样做res = Array(Real,(n_iterations,n_parameters))。但是,拥有命名列会更好,我认为这意味着使用DataFrame。然而,当我尝试做res_df = convert(DataFrame,res)这样的事情时,它会抛出一个错误。我希望采用比res_df = DataFrame(a=Array(Real,N),b=Array(Real,N),c=Array(Real,N),....)更为简洁的方法,如以下答案所示:julia create an empty dataframe and append rows to it

1 个答案:

答案 0 :(得分:7)

您可以使用DataFrame(column_eltypes::Array{T,1},cnames::Array{T,1},nrows::Integer)构造函数:

julia> DataFrame([Real,Real,Real],[:a,:b,:c], 10000)
10000x3 DataFrame
| Row   | a  | b  | c  |
|-------|----|----|----|
| 1     | NA | NA | NA |
| 2     | NA | NA | NA |
⋮
| 9998  | NA | NA | NA |
| 9999  | NA | NA | NA |
| 10000 | NA | NA | NA |

也就是说,我高度建议您为数组使用具体类型而不是Real;例如,DataFrame([Float64, Float64, …。这样做会带来巨大的性能提升。