从数组中减去行的平均值

时间:2020-07-01 21:48:19

标签: python broadcasting numpy-slicing

我正在尝试使用切片和广播从数组的相应列中减去数组的列平均值。我不知道如何转置或我为什么需要转置,现在我有了给定的数组Y。

    Y_avg = Y.mean(axis=0)
    Z = (Y.T - Y_avg).T

这应该创建一个现在列平均为0的数组。但这不是我要得到的

2 个答案:

答案 0 :(得分:0)

您会得到什么?初始化数组,然后执行轴= 0的平均值(因为这是一维数组),可以按预期工作。

import numpy as np

Y = np.array([1,2,3])
Y_avg = Y.mean(axis=0)
print Y - Y_avg

这将按预期输出[-1. 0. 1.]

答案 1 :(得分:0)

您所看到的是,沿轴取平均值会降低尺寸,将数据从形状(n, k)移到形状(n,)。这与(n, k)广播减法不兼容。对此已经写了很多,例如这里https://stackoverflow.com/a/24564015/3798897

重塑平均值以使其可广播可能会更方便,而不是多次转置:

# Transform the single-dimension mean into a 2D column vector
Y_avg = Y.mean(axis=1).reshape(-1, 1)
Z = Y - Y_avg