如何按行标准化矩阵(轴= 1)?
How to standardize matrix row-wise (axis=1)?
对于二维数组,我正在尝试制作一个标准化函数,它应该按行和按列工作。当使用 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,)
谁能告诉我该怎么做,因为我还是个初学者?
您看到错误的原因是您无法计算
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 开发人员引入了一个参数来实现这一点:keepdims=True
,您应该在 mean()
和 std()
中使用它:
def standardize(x, axis=None):
return (x - x.mean(axis, keepdims=True)) / x.std(axis, keepdims=True)
对于二维数组,我正在尝试制作一个标准化函数,它应该按行和按列工作。当使用 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,)
谁能告诉我该怎么做,因为我还是个初学者?
您看到错误的原因是您无法计算
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 开发人员引入了一个参数来实现这一点:keepdims=True
,您应该在 mean()
和 std()
中使用它:
def standardize(x, axis=None):
return (x - x.mean(axis, keepdims=True)) / x.std(axis, keepdims=True)