2009-11-24 6 views
1

비닝 평균을 수행하려고합니다. 나는 코드를 사용하고있다 :이 비닝 및 평균을 MATLAB에서 어떻게 수행해야합니까?

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

마지막 줄은 싱글 톤 차원을 제거한다.

그래서 나는 평균 300 점 이상을 볼 수 있습니다. 144 * 300의 배수와 같지 않은 총 포인트 수가있는 경우를 제외하고는 정상적으로 작동합니다.

총 포인트 수가 144 * 300의 배수가 아니어도이 비닝 평균 작업을 수행 할 수있는 방법이 있습니까?

편집 : 죄송합니다. 제 질문이 혼란 스럽다면 죄송합니다. 명확히하려면 ...

43200 개의 행과 27 개의 열이있는 파일이 있습니다. 한 번에 300 행을 비닝하여 평균을 구합니다. 결국에는 크기가 인 매트릭스가 남았습니다.

필자가 작성한 코드는 정확하게 43200 개의 행이있는 경우에만 작동합니다. 어떤 경우에는 43199, 43194 등이 있습니다. 변형 함수는 총 행 수가 300 (배 크기) 인 경우 작동합니다. 총 행 수가 300의 배수가 아닌 경우이 비닝 평균을 작동시키는 방법이 있습니까?

+2

데이터가 어떻게 보이는지 알지 못하는 한 가지 아이디어는 배열에 원하는 크기에 도달하기 위해'NaN'을 채우고 NaN 값만 무시하고'mean'과 같은'nanmean'을 사용하는 것입니다. – Amro

+0

얼마 남지 않을 것입니까? 하나 또는 둘? 수백명? 수천? 일부 파일의 경우 – gnovice

+0

은 86399이고 다른 86395는 86400과 비교되는데, 이는 하루 종일 필요한 것입니다. 내가 143 * 300으로 동등하게하기 위해 더 많은 포인트를 지우면 나는 그것을 쓴 것처럼 수동으로 확인하고 PTS 지우십시오. 그래서 내가 할 수있는 방법이 있는지 궁금 해서요 –

답변

2

나는

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)의 배수가 될 것 같은 점을 제거합니다. RESHAPE에 대한 호출에서 []을 사용하므로 열 수를 알아낼 수 있습니다.

+0

남자 u는 굉장하다. ... 활들 !! 참고 :이 질문에 -1이있는 이유는 무엇입니까? –

+0

@AP : 첫 번째 버전이 약간 불투명하기 때문에 누군가가 당신을 무차별 적으로 보냈음에 틀림 없습니다. 최신 버전은 더 이해가됩니다. 어쩌면 그들은 downvote를 제거 할 것입니다. – gnovice

관련 문제