Вы можете использовать repmat
, чтобы сделать ваш средний / стандартный вектор того же размера, что и исходная матрица, а затем использовать прямое вычисление следующим образом:
[rows, cols] = size(a); %#to get the number of rows
avgc= repmat(avg(a),[rows 1]); %# average by column, vertically replicated by number of rows
stdc= repmat(std(a),[rows 1]); %# std by column, vertically replicated by number of rows
%# Here, a, avgc and stdc are the same size
result= (a - avgc) ./ stdc;
Edit:
Судя по сообщению в блоге mathworks , bsxfun
решение работает быстрее и потребляет меньше памяти (см. Ответ acai). Для матриц среднего размера я лично предпочитаю repmat, который облегчает чтение и отладку кода (для меня).