Как я должен выполнить это бинирование и усреднение в MATLAB?
Вопрос
Я пытаюсь выполнить усреднение по биннингу.Я использую код:
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.Тогда ваша форма и среднее значение должны сработать.Обратите внимание, что я использую []
в призыве к ИЗМЕНИТЬ ФОРМУ, что позволяет ему определить, каким должен быть номер столбца.