3

私は行列を取り、その列の平均を中心に各セルの値を正規化しようとしています。正規化とは、その列の平均値から各セルの値を減算することを意味します。つまり、Column1 の値から Column1 の平均を減算します。ColumnN の値から ColumnN の平均を減算します。Matlabでスクリプトを探しています。ありがとう!

4

4 に答える 4

10

この関数を使用してmean各列の平均を取得し、次に関数を使用して各列から平均bsxfunを減算することができます。

M = bsxfun(@minus, M, mean(M, 1));

さらに、バージョンR2016b以降では、MATLABが算術演算の正しいサイズへのオペランドの暗黙的な展開を実行するという事実を利用できます。これは、これを簡単に実行できることを意味します。

M = M-mean(M, 1);
于 2010-08-03T19:01:17.240 に答える
3

手始めにmean関数を試してみてください。行列を渡すと、すべての列が平均化され、行ベクトルが返されます。

次に、平均を差し引く必要があります。これを行うには、行列が同じサイズでなければならないため、平均行ベクトルで repmat を使用します。

a=rand(10);
abar=mean(a);
abar=repmat(abar,size(a,1),1);
anorm=a-abar;

またはワンライナー:

anorm=a-repmat(mean(a),size(a,1),1);
于 2010-08-03T18:55:14.320 に答える
1
% Assuming your matrix is in A
m = mean(A);
A_norm = A - repmat(m,size(A,1),1)
于 2010-08-03T19:01:17.647 に答える
1

指摘したように、mean追加の引数なしで呼び出されたときに入力の各列の平均を与える関数が必要になります。平均を単純に減算することはできないため、少し複雑になります。その次元は元の行列とは異なります。

だからこれを試してみてください:

a = magic(4)
b = a - repmat(mean(a),[size(a,1) 1]) % subtract columnwise mean from elements in a

repmatデータの次元に一致するように平均を複製します。

于 2010-08-03T19:03:29.463 に答える