2014-11-28 1 views
1

4-D 매트릭스가 있습니다. 크기는 [17,14,122,16]과 같이 경도, 위도, 일, 년입니다. 각 셀에 대해 98 백분위 수 이상의 값의 빈도를 알아야 최종 출력이 98 % 임계 값을 초과하는 값의 발생 횟수를 포함하는 17x14의 배열로 제공됩니다.MATLAB에서 각 셀의 임계 값보다 높은 주파수를 찾습니다.

저는 각 셀에 대해 98 백분위 수와 관련된 값의 매트릭스 17x14를 제공하지만 출현 빈도를 결정할 수 없습니다.

k=0; 
p=cell(1,238); 
r=cell(1,238); 

for i=1:17 
    for j=1:14 
     n=m(i,j,[1:122],[1:16]); 
     n=squeeze(n); 
     k=k+1; 
     q=prctile(n(:),98); 
     r{k}=nansum(nansum(n>=q)); 
     p{k}=q; 
    end 
end 

이 코드 행렬을 p 벌금을 부여하지만 매트릭스 r 모든 셀들에 대해 동일한 값을 포함한다. 어떻게 가능할까요? 이걸 내가 뭘 잘못하고 있니? 도와주세요.

+1

모든 데이터가 숫자이므로 2D 행렬로 전환 할 수 있습니까? 그러면 첫 번째 열은 경도이고 두 번째 열은 위도입니다. 이 행렬에 대한 연산은 이해하기가 쉽습니다. 4D 배열의 예제를 반환하는 최소 코드 예제를 제공 할 수 있습니까? –

+0

n = squeeze (n)을 수행하면 122x16 크기의 2D 행렬이 제공됩니다. – MelB

답변

0

정의에 따르면 98 백분위 수를 초과하는 값의 빈도는 2 %입니다.

나는 r이 39와 동일한 값을 추측하고 있습니다. 122x16 매트릭스의 상위 2 %에있는 요소 수 (즉, 1952 요소)

r = 0.02*1952; 

r = 
     39.040 

코드가 이론 값을 검증하고 있습니다. 아마도 당신은 다른 질문을 생각하고 있습니까?

다음은 데이터에 대해 0에서 100까지 무작위로 생성 된 (균일 한 분포) 시뮬레이션 된 예입니다().

p=cell(1,238); 
r=cell(1,238); 
for i=1:17 
    for j=1:14 
     %   n=m(i,j,[1:122],[1:16]); 
     %   n=squeeze(n); 

     % After you do n=squeeze(n), it gives 2-D matrix of 122x16 
     % dimensions. 
     n = rand(122,16)*100; % simulation for your 2-D matrix 
     k=k+1; 
     q=prctile(n(:),98); 
     r{k}=nansum(nansum(n>=q)); 
     p{k}=q; 
    end 
end 
+0

고마워요, 그것은 오래 전이었습니다. 나는 그 질문을 개선해야한다고 생각한다. 그 이후로 내 통계가 향상되었습니다. – MelB

+0

환영합니다. 오래 전 이었지만 여전히 좋은 질문이었습니다. 한 번 이상 나 자신도 똑같은 일을했기 때문에 대답하고 싶었습니다 :) – informaton

관련 문제