Я пытаюсь взять матрицу и нормализовать значения в каждой ячейке вокруг среднего для этого столбца. Нормализовать я имею в виду вычесть значение в каждой ячейке из среднего значения в этом столбце, то есть вычесть среднее значение для столбца 1 из значений в столбце 1 ... вычесть среднее значение для столбца N из значений в столбце N. Я ищу сценарий в Matlab. Благодаря!Как нормализовать данные вокруг среднего значения для столбца в MATLAB?
ответ
Попробуйте функцию 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);
Вы можете использовать функцию mean
, чтобы получить среднее значение каждого столбца, то функция bsxfun
вычитать, что из каждой колонки:
M = bsxfun(@minus, M, mean(M, 1));
Кроме того, начиная с версии R2016b, вы можете воспользоваться тем фактом, что MATLAB будет выполнять implicit expansion операндов до нужного размера для арифм этической операции. Это означает, что вы можете просто сделать это:
M = M-mean(M, 1);
как бы переключить его, чтобы иметь значение строк – Spencer
@Spencer: вам просто нужно добавить ', 2' к вызову MEAN, чтобы вычесть средства строк из каждой строки, например:' M = bsxfun (@ minus, M, mean (M, 2)); ' – gnovice
+1 для bsxfun (самое странное имя, которое я видел в то время для полезной функции!) –
% Assuming your matrix is in A
m = mean(A);
A_norm = A - repmat(m,size(A,1),1)
Ум, вопрос, по-видимому, заключался в вычитании среднего значения. Ваш ответ ДИВИДЕТСЯ по среднему значению. Да, слово normalize было использовано, но оно было явно определено. – 2010-08-03 19:03:54
Как уже отмечалось, вы хотите функцию mean
, которая при вызове без каких-либо дополнительных аргументов дает среднее значение каждого столбца на входе. Затем возникает небольшое осложнение, потому что вы не можете просто вычесть среднее значение - его размеры отличаются от исходной матрицы.
Так попробуйте это:
a = magic(4)
b = a - repmat(mean(a),[size(a,1) 1]) % subtract columnwise mean from elements in a
repmat
размножается среднее в соответствии с размерами данных.
... и пользователи MATLAB по всему миру поднимают руки и говорят «о, оооооо, я знаю это!» – Doresoom
@Doresoom ... слишком плохо Google-читатель так медленно при доставке каналов. – JudoWill