将2D numpy数组累积到3D张量中,然后按元素对其进行平均



积累阶段

在脚本中,相同大小的数据矩阵X由某个模型(此处仅为随机数生成器(RNG((重新估计,并在有限数量的试验t的过程中累积/保存在矩阵Y中。

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

还原阶段

然后,我如何将三维Y张量内所有累积的二维X阵列按元素归约为与X形状相同的单个二维矩阵Z?一个示例性减少是减少为Z:的所有单个X元素的平均值

Z[0,0] = average of: {the first Z[0,0], second Z[0,0], ... , fifth Z[0,0]}

如果可能的话,我不希望有逐元素的循环。我使用numpy数组展示了累积阶段,因为我不认为Panda DataFrame可以是3d张量,仅限于2d输入,但算术归约阶段

这就是您想要的吗?

玩具示例:

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不能真正处理三维张量,除非你处理多索引,所以我个人宁愿先在numpy中处理这个操作,然后将其转换为dataframe。您可以通过to_numpy()dataframes转换为numpy。

相关内容

最新更新