如何标准化矩阵行(轴= 1)?

时间:2017-12-02 10:00:58

标签: python matrix standardized

对于二维数组,我正在尝试创建一个标准化函数,它应该按行和列方式工作。当使用axis = 1(行方式)给出参数时,我不确定该怎么做。

def standardize(x, axis=None):
if axis == 0:
    return (x - x.mean(axis)) / x.std(axis)
else:
    ?????

我尝试在此部分中将axis更改为axis = 1(x - x.mean(axis)) / x.std(axis)

但后来我收到了以下错误:

 ValueError: operands could not be broadcast together with shapes (4,3) (4,)

有人可以向我解释做什么,因为我还是初学者吗?

1 个答案:

答案 0 :(得分:0)

您看到错误的原因是您无法计算

x - x.mean(1)

因为

x.shape = (4, 3)
x.mean(1).shape = (4,)  # mean(), sum(), std() etc. remove the dimension they are applied to

但是,如果我们能够以某种方式确保mean() 保持其应用的维度,则可以执行此操作,从而产生

x.mean(1).shape = (4, 1)

(查询NumPy Broadcasting rules)。

因为这是一个常见问题,NumPy开发人员引入了一个完全符合keepdims=True的参数,您应该在mean()std()中使用

def standardize(x, axis=None):
    return (x - x.mean(axis, keepdims=True)) / x.std(axis, keepdims=True)