2017-12-02 19 views
0

2次元配列の場合は、標準化関数を作成しようとしています。標準化関数は、行単位および列単位で動作する必要があります。私は引数が軸= 1(行ごと)で与えられたときに何をすべきか分からない。行列を行ごとに標準化する方法(軸= 1)?

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

私はこの部分にaxis = 1axisを変更しようとしました:(x - x.mean(axis))/x.std(axis)

しかし、その後、私は、次のエラーを得た:私はと

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

誰かが何をすべきか私に説明できますまだ初心者ですか?

+0

このリンクをチェックhttps://stackoverflow.comを/ questions/12525722/normalize-data-in-pandasを参照してください。例をよく説明しています。 – Abhishek

答えて

0

あなたが見ているエラーの理由は、我々は何とかmean()は次元を保つことを確認することができれば

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

は、しかし、あなたが操作を行うことができますので、あなたが

x - x.mean(1) 

を計算することができないということですに適用すると、

(ルックアップNumPy Broadcasting rules)。

これは、このような共通の問題であるので、numpyの開発者は、まさにそのパラメータ導入:あなたはmean()std()に使用する必要がありkeepdims=True、:

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