まず、いくつかのサンプルデータ:
>>> import numpy as np
>>> X = np.matrix(np.arange(25).reshape((5,5)))
>>> print X
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]
[20 21 22 23 24]]
numpyには便利なmean
機能があります。ただし、デフォルトでは、配列内のすべての値の平均が表示されます。各行の平均が必要なのでaxis
、操作のを指定する必要があります。
>>> np.mean(X, axis=1)
matrix([[ 2.],
[ 7.],
[ 12.],
[ 17.],
[ 22.]])
言うことに注意してください:列に沿って(各行axis=1
の)平均を求めます。ここで、0 =行、1 =列(など)です。これで、元々行ったように、この平均をから差し引くことができます。X
未承諾のアドバイス
通常、マトリックスクラスは避けるのが最善です(ドキュメントを参照)。np.matrix
サンプルデータから呼び出しを削除すると、通常のnumpy配列が得られます。
残念ながら、この特定のケースでは、配列を使用するnp.mean
と1D配列が返されるため、状況が少し複雑になります。
>>> X = np.arange(25).reshape((5,5))
>>> r_means = np.mean(X, axis=1)
>>> print r_means
[ 2. 7. 12. 17. 22.]
からこれを減算しようとするとX
、r_means
列ベクトルではなく行ベクトルにブロードキャストされます。
>>> X - r_means
array([[ -2., -6., -10., -14., -18.],
[ 3., -1., -5., -9., -13.],
[ 8., 4., 0., -4., -8.],
[ 13., 9., 5., 1., -3.],
[ 18., 14., 10., 6., 2.]])
したがって、1D配列をN x 1
列ベクトルに再形成する必要があります。
>>> X - r_means.reshape((-1, 1))
array([[-2., -1., 0., 1., 2.],
[-2., -1., 0., 1., 2.],
[-2., -1., 0., 1., 2.],
[-2., -1., 0., 1., 2.],
[-2., -1., 0., 1., 2.]])
pass toは、元の配列の形状と新しい配列の残りの次元に基づいてこの次元を計算するようにnumpyに指示します-1
。reshape
または、を使用して配列の形状を変更することもできますr_means[:, np.newaxis]
。