Dataframe Julia重塑多维阵列的最佳方法

Dataframe Julia重塑多维阵列的最佳方法,dataframe,reshape,julia,Dataframe,Reshape,Julia,我有一个多维数组: 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] =

我有一个多维数组:

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
 ...      |  ...      | ...      |   ...

目前,我认为最好的方法是混合使用循环和调用
重塑

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])

查看您的数据,您似乎希望基本上将
sim1.value[1:5,:,:]
输出的三个矩阵垂直堆叠在彼此的顶部,并添加另一列,其中包含矩阵的索引。聪明而受人尊敬的约翰·迈尔斯·怀特(John Myles White)的公认答案似乎将每个矩阵的全部内容放在了自己的专栏中

下面使用
vcat
进行堆叠,并使用
hcat
fill
添加额外列,以匹配所需的输出。JMW我肯定会知道是否有更好的方法:)

请注意,您可以在不显式调用hcat和vcat的情况下更简洁地执行此操作:

newA = [[[A[:,:,i] fill(i,size(A,1))] for i in 1:size(A,3)]...]
newA = [[[A[:,:,i] fill(i,size(A,1))] for i in 1:size(A,3)]...]