我有一个多维数组:
julia> sim1.value[1:5,:,:]
5x3x3 Array{Float64,3}:
[:, :, 1] =
0.201974 0.881742 0.497407
0.0751914 0.921308 0.732588
-0.109084 1.06304 1.15962
-0.0149133 0.896267 1.22897
0.717094 0.72558 0.456043
[:, :, 2] =
1.28742 0.760712 1.61112
2.21436 0.229947 1.87528
-1.66456 1.46374 1.94794
-2.4864 1.84093 2.34668
-2.79278 1.61191 2.22896
[:, :, 3] =
0.649675 0.899028 0.628103
0.718837 0.665043 0.153844
0.914646 0.807048 0.207743
0.612839 0.790611 0.293676
0.759457 0.758115 0.280334
我在
中有第二个维度的名称julia> sim1.names
3-element Array{String,1}:
"beta[1]"
"beta[2]"
"s2"
最好的方法是重塑这个多暗阵列,以便我有一个数据框,如:
beta[1] | beta[2] | s2 | chain
0.201974 | 0.881742 | 0.497407 | 1
0.0751914| 0.921308 | 0.732588 | 1
-0.109084 | 1.06304 | 1.15962 | 1
-0.0149133| 0.896267 | 1.22897 | 1
... | ... | ... | ...
1.28742 | 0.760712 | 1.61112 | 2
2.21436 | 0.229947 | 1.87528 | 2
-1.66456 | 1.46374 | 1.94794 | 2
-2.4864 | 1.84093 | 2.34668 | 2
-2.79278 | 1.61191 | 2.22896 | 2
... | ... | ... | ...
答案 0 :(得分:3)
目前,我认为最好的方法是混合使用循环并调用reshape
:
using DataFrames
A = randn(5, 3, 3)
df = DataFrame()
for j in 1:3
df[j] = reshape(A[:, :, j], 5 * 3)
end
names!(df, [:beta1, :beta2, :s2])
答案 1 :(得分:0)
查看您的数据,似乎您希望基本上将sim1.value[1:5,:,:]
的三个矩阵输出叠加在一起,并添加另一个具有矩阵索引的列。精彩而尊敬的John Myles White接受的答案似乎将每个矩阵的全部内容都放入了自己的专栏中。
以下内容与您使用vcat
进行堆叠以及hcat
和fill
添加额外列的所需输出相匹配。 JMW我肯定会知道是否有更好的方法:)
using DataFrames
A = randn(5, 3, 3)
names = ["beta[1]","beta[2]","s2"]
push!(names, "chain")
newA = vcat([hcat(A[:,:,i],fill(i,size(A,1))) for i in 1:size(A,3)]...)
df = DataFrame(newA, Symbol[names...])
请注意,如果没有显式调用hcat和vcat,您可以更简洁地执行此操作:
newA = [[[A[:,:,i] fill(i,size(A,1))] for i in 1:size(A,3)]...]