问题描述
积累阶段
在脚本中,相同大小的数据矩阵X
由某些模型(这里只是一个随机数生成器(RNG))重新估计,并在矩阵Y
上累积/保存t
的有限次数的试验过程。
import numpy as np
from numpy.random import random
import pandas as pd
k = 3 #shape
t = 5 #trials
Y = np.zeros((t,k,k))
for i in range(5):
X = random((k,k)) #2D estimate
X = pd.DataFrame(X)
Y[i,:,:] = X #3D tensor
还原阶段
然后,我该如何在3d X
张量内将所有累积的2d Y
数组按元素逐个减少到与形状相同的单个2d矩阵Z
中X
?减少量的示例是将所有单个X
元素减少到Z
的平均值:
Z[0,0] = average of: {the first Z[0,0],second Z[0,...,fifth Z[0,0]}
如果可能的话,我希望没有逐个元素的循环。我展示了使用numpy数组的积累阶段,因为我不认为pandas DataFrames可以是3d张量,仅限于2d输入,但是算术简化阶段(平均跨累积数组)作为熊猫DataFrame操作来完成?
解决方法
这是您要找的吗?
玩具示例:
test = np.arange(12).reshape(-1,2,3)
array([[[ 0,1,2],[ 3,4,5]],[[ 6,7,8],[ 9,10,11]]])
解决方案
np.apply_over_axes(np.mean,test,0).reshape(test.shape[1],test.shape[2])
array([[3.,4.,5.],[6.,7.,8.]])
IIRC,我认为您是对的,除非您对多索引感到困惑,否则pandas
不能真正处理3d张量,因此我个人更希望先在numpy
中处理此操作,然后再进行转换到dataframe
。您可以通过dataframe
将to_numpy()
转换为numpy。