将2D numpy数组累加到3D张量中,然后在

问题描述

积累阶段

在脚本中,相同大小的数据矩阵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矩阵ZX?减少量的示例是将所有单个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。您可以通过dataframeto_numpy()转换为numpy。