Усреднение каждых 10 чисел в матрице в Matlab

Как получить среднее значение из каждых 10 чисел в большой матрице (27x16800). Я не могу найти решение. Если кто-то может помочь, это будет здорово.

UPD К сожалению, я должен был быть более ясным. У меня есть матрица записанных значений (16800) для 27 предметов. Каждый предмет соответствует строке; Я хочу получить новую матрицу из 27 предметов с 1680 усредненными числами в строках (тогда как каждый «старый» 10 чисел в строках будет усреднен до 1 «нового» среднего числа).

Всего 1 ответ


Учитывая матрицу случайных данных x :

x = randn(27,16800);

вы можете вычислить среднее значение по всем группам значений n=10 вдоль строк двумя способами, описанными Луисом Мендо и Брайсом в комментариях:

y = permute(mean(reshape(x.', n, [], size(x,1)), 1), [3 2 1]); % Luis
y = squeeze(mean(reshape(x,size(x,1),n,[]),2));                % Brice

Однако, как заметил Вольфи , они работают, только если длина строк точно делится на n .

Более общий подход может быть получен путем свертывания:

y = conv2(x,ones(1,n)/n,'valid');
y = y(:,1:n:end);

Каждый матричный элемент на выходе свертки представляет собой среднее значение по n значениям. Этот результат - n-1 элементов короче, чем вход. То есть мы вычислили в n раз столько средних, сколько необходимо. Вторая строка занимает первое из каждых n средних значений, что дает выход ожидаемого размера.

Свертка дает результат, отличный от других методов, с помощью численной неточности (максимальная разница составляет 4,4409е-16 на моей машине). Это связано с тем, что conv2 реализуется с использованием SIMD-инструкций вашего процессора, тогда как, скорее всего, нет. Подход свертки может быть несколько медленнее, чем другой подход, но он универсален и легко адаптируется.


Есть идеи?

10000