Как я должен выполнить это бинирование и усреднение в MATLAB?

StackOverflow https://stackoverflow.com/questions/1787057

  •  21-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь выполнить усреднение по биннингу.Я использую код:

Avg = mean(reshape(a,300,144,27));
AvgF = squeeze(Avg);

Последняя строка избавляет от одноэлементных измерений.

Итак, как можно видеть, я набираю в среднем более 300 баллов.Это работает нормально, за исключением случаев, когда у меня общее количество очков не равно кратному 144 * 300.

Есть ли какой-нибудь способ заставить это среднее значение биннинга работать, даже если общее количество баллов не кратно 144 * 300?

Редактировать: Извините, если мой вопрос прозвучал сбивающе.Чтобы внести ясность...

У меня есть файл с 43200 строками и 27 столбцами.Я усредняю, объединяя 300 строк за раз, что означает, что в итоге у меня остается матрица размера 144 на 27.

Мой код, как я написал его выше, работает только тогда, когда у меня ровно 43200 строк.В некоторых случаях у меня есть 43199, 43194 и т.д..Функция reshape работает, когда у меня есть общее количество строк, кратное 300 (размер ячейки).Есть ли способ заставить это среднее значение биннинга работать, когда мое общее количество строк не кратно 300?

Это было полезно?

Решение

Думаю, теперь я лучше понимаю проблему...

Если a считываются ли данные из вашего файла (размера N-на-27, где N в идеале равно 43 200), тогда, я думаю, вы хотели бы сделать следующее:

nRemove = rem(size(a,1),300);  %# Find the number of points to remove
a = a(1:end-nRemove,:);        %# Trim points to make an even multiple of 300
Avg = mean(reshape(a,300,[],27));
AvgF = squeeze(Avg);

Это приведет к удалению точек таким образом, что количество строк в a будет кратно 300.Тогда ваша форма и среднее значение должны сработать.Обратите внимание, что я использую [] в призыве к ИЗМЕНИТЬ ФОРМУ, что позволяет ему определить, каким должен быть номер столбца.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top