我正在尝试使用切片和广播从数组的相应列中减去数组的列平均值。我不知道如何转置或我为什么需要转置,现在我有了给定的数组Y。
Y_avg = Y.mean(axis=0)
Z = (Y.T - Y_avg).T
这应该创建一个现在列平均为0的数组。但这不是我要得到的
答案 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