[这篇文章的早期版本没有得到任何回应,因此,如果这是因为不清楚,我已经重新编写了它,并添加了额外的解释和代码注释。]
我想计算一个numpyn维数组的元素的平均值和标准差,这些元素不对应于单个轴(而是对应于k>;1非连续轴),并得到在新的(n-k+1)维数组中收集的结果。在Does numpy include standard constructs to perform this operation efficiently?
下面复制的函数mu_sigma是我解决这个问题的最佳尝试,但它有两个明显的低效:1)它需要复制原始数据;2)它计算平均值两次(因为计算标准差需要计算平均值)。在
mu_sigma函数接受两个参数:box和{}。box是一个n维numpy数组(又名“ndarray”),而axes是一个k-整数元组,表示box的维数(不一定是连续的)。包含新的多维函数<1><1>的新函数。在
下面的代码还包括mu_sigma的一个实例。在这个例子中,box参数是一个4×2×4×3×4的浮点数数组,axes参数是元组(1,3)。(因此,我们有n==len(box.shape)==5,并且k==len(axes)==2。)对于这个示例输入返回的结果(这里我称之为outbox)是一个4×4×2的浮点数数组。对于每个索引的三元组i、k、j(其中每个索引都在集合{0、1、2、3}上),元素{}是numpy表达式box[i, 0:2, j, 0:3, k]指定的6个元素的平均值。同样,outbox[i, j, k, 1]是相同6个元素的标准偏差。这意味着,第一个n-k==3个与输入ndarraybox的非轴维度相同的索引上的结