Как получить среднее значение из каждых 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-инструкций вашего процессора, тогда как, скорее всего, нет. Подход свертки может быть несколько медленнее, чем другой подход, но он универсален и легко адаптируется.