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