2D Numpy 配列があり、各列を平均 0、分散 1 に正規化したいと考えています。私は主に C++ に慣れているので、ループを使用して列内の要素を反復処理し、必要な操作を実行してから、これをすべての列に対して繰り返します。これを行う Python の方法について知りたいです。
を 2D 配列とclass_input_data
します。列の平均は次のように取得できます。
column_mean = numpy.sum(class_input_data, axis = 0)/class_input_data.shape[0]
次に、すべての列から平均を減算します。
class_input_data = class_input_data - column_mean
この時点で、データの平均はゼロになっているはずです。ただし、次の値:
numpy.sum(class_input_data, axis = 0)
0 と等しくないので、正規化で何か間違ったことをしたことになります。0 と等しくないというのは、浮動小数点の不正確さに起因する非常に小さな数値を意味しているわけではありません。
ベストアンサー1
何かのようなもの:
import numpy as np
eg_array = 5 + (np.random.randn(10, 10) * 2)
normed = (eg_array - eg_array.mean(axis=0)) / eg_array.std(axis=0)
normed.mean(axis=0)
Out[14]:
array([ 1.16573418e-16, -7.77156117e-17, -1.77635684e-16,
9.43689571e-17, -2.22044605e-17, -6.09234885e-16,
-2.22044605e-16, -4.44089210e-17, -7.10542736e-16,
4.21884749e-16])
normed.std(axis=0)
Out[15]: array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])