对于二维数组,我正在尝试创建一个标准化函数,它应该按行和列方式工作。当使用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,)
有人可以向我解释做什么,因为我还是初学者吗?
答案 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开发人员引入了一个完全符合keepdims=True
的参数,您应该在mean()
和std()
中使用
def standardize(x, axis=None):
return (x - x.mean(axis, keepdims=True)) / x.std(axis, keepdims=True)