Как нормализовать данные около среднего для столбца в MATLAB? - PullRequest
3 голосов
/ 03 августа 2010

Я пытаюсь взять матрицу и нормализовать значения в каждой ячейке относительно среднего для этого столбца.Под нормализацией я подразумеваю вычитать значение в каждой ячейке из среднего значения в этом столбце, т. Е. Вычитать среднее для Column1 из значений в Column1 ... вычитать среднее для ColumnN из значений в ColumnN.Я ищу сценарий в Matlab.Спасибо!

Ответы [ 4 ]

10 голосов
/ 03 августа 2010

Вы можете использовать функцию mean, чтобы получить среднее значение каждого столбца, а затем функцию bsxfun, чтобы вычесть это значение из каждого столбца:

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

Кроме того, начиная с версии R2016b, вы можете воспользоваться тем, что MATLAB будет выполнять неявное расширение операндов до правильного размера для арифметической операции.Это означает, что вы можете просто сделать это:

M = M-mean(M, 1);
3 голосов
/ 03 августа 2010

Попробуйте функцию Среднее для начинающих. Передача ей матрицы приведет к усреднению всех столбцов и возврату вектора строки.

Далее вам нужно вычесть среднее значение. Для этого матрицы должны быть одинакового размера, поэтому используйте 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);
1 голос
/ 03 августа 2010

Как уже указывалось, вам понадобится функция mean, которая при вызове без каких-либо дополнительных аргументов дает среднее значение каждого столбца во входных данных. Затем возникает небольшое осложнение, потому что вы не можете просто вычесть среднее - его размеры отличаются от исходной матрицы.

Так попробуйте это:

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

repmat копирует среднее значение, чтобы соответствовать измерениям данных.

1 голос
/ 03 августа 2010
% Assuming your matrix is in A
m = mean(A);
A_norm = A - repmat(m,size(A,1),1)
...