2013-07-11 10 views
3

나는 기여자가 해결하는데 도움이 될 수있는 문제가 있습니다.다른 파일의 값을 기준으로 한 파일의 평균값

두 개의 셀이 모두 같은 수의 행렬로 구성되어 있습니다 (일련의 데이터 파일을 읽고 루프 계산을 한 결과). 각 행렬은 일련의 십진수 데이터 열 뒤에 일련의 십진법 열이있는 열입니다. 다음은 더미 데이터입니다.

A = [ 186.356 1 2 3 4;186.364 2 3 4 5;186.372 3 4 5 6] 
B = [ 187.356 1 2 3 4;187.364 2 3 4 5;187.372 3 4 5 6] 
C = [ 188.356 1 2 3 4;188.364 2 3 4 5;188.372 3 4 5 6] 
x = {A,B,C} 
D = [ 186.3568 1 2 3 4; 186.3576 2 3 4 5; 186.3584 3 4 5 6; 186.3592 4 5 6 7; 186.36 5 6 7 8; 186.3608 6 7 8 9; 186.3616 7 8 9 10; 186.3624 8 9 10 11; 186.3632 9 10 11 12; 186.364 10 11 12 13; 186.3648 11 12 13 14; 186.3656 12 13 14 15] 
E = [ 187.3568 1 2 3 4; 187.3576 2 3 4 5; 187.3584 3 4 5 6; 187.3592 4 5 6 7; 187.36 5 6 7 8; 187.3608 6 7 8 9; 187.3616 7 8 9 10; 187.3624 8 9 10 11; 187.3632 9 10 11 12; 187.364 10 11 12 13; 187.3648 11 12 13 14; 187.3656 12 13 14 15] 
F = [ 188.3568 1 2 3 4; 188.3576 2 3 4 5; 188.3584 3 4 5 6; 188.3592 4 5 6 7; 188.36 5 6 7 8; 188.3608 6 7 8 9; 188.3616 7 8 9 10; 188.3624 8 9 10 11; 188.3632 9 10 11 12; 188.364 10 11 12 13; 188.3648 11 12 13 14; 188.3656 12 13 14 15] 
y = {D,E,F} 

제 의도는 x와 y에 포함 된 데이터 열을 합하는 것입니다. 그러나 y에서 데이터의 해상도가 x보다 훨씬 높다는 것을 알 수 있으므로 x의 타임 스텝를 기준으로 y에서 데이터를 평균화하고 싶습니다. 일례로서

X와 Y 사이에서 일치하는 제 1 시간주기

는 행렬 A의 1 행에 대응하지만 매트릭스 D.에서만 제 10 행 A의 첫 번째 행의 합은 10이다

sumA = sum(A(1,2:end),2) 

및 D의 제 10 행의 평균은 38

이것은 단순한 일례이다 총 결과

sumD = sum(mean(D(1:10,2:end)),2) 

이고; 두 개의 큰 셀에 많은 행의 데이터가 있습니다. 나는 처음 두 셀 x, y와 같은 차원의 다른 셀로 다시 쓰면서 데이터를 반복하면서 셀에서 데이터를 추출 할 필요가 있다고 생각하지만, 어디서부터 시작해야 할지를 알지 못한다. 어떤 도움이라도 좋을 것입니다. 내 문제를 명확히하기 위해 찾고에서

편집

나는 내가 원래의 질문에 실수를 깨닫는다. 이것은 의심의 여지가 혼란의 원인입니다.

모든 전술 정확하지만 D의 제 10 행의 합계 :

sumD = sum(mean(D(1:10,2:end)),2) 
sumD = 

28 

실제로에서 두 번째 행의 합계에 첨가한다 :이 때문이다

sumA = sum(A(2,2:end),2) 
sumA = 

14 

행렬 D의 열 1의 행 1 - 10에있는 모든 값은 행렬 A의 행 1과 열 1의 값보다 크지 만 행렬 A의 행 2와 열 2보다 작거나 같습니다. 행렬 D의 더미 데이터 :

D = [ 186.3568 1 2 3 4; 186.3576 2 3 4 5; 186.3584 3 4 5 6; 186.3592 4 5 6 7; 186.36 5 6 7 8; 186.3608 6 7 8 9; 186.3616 7 8 9 10; 186.3624 8 9 10 11; 186.3632 9 10 11 12; 186.364 10 11 12 13; 186.3648 11 12 13 14; 186.3656 12 13 14 15; 186.3664 13 14 15 16; 186.3672 14 15 16 17; 186.368 15 16 17 18; 186.3688 16 17 18 19; 186.3696 17 18 19 20; 186.3704 18 19 20 21; 186.3712 19 20 21 22; 186.372 20 21 22 23] 

이제 결과는 두 개의 값 벡터가됩니다. 첫 번째 값은 A (또는 sumA)의 두 번째 행 합계와 D 행렬 (또는 sumD)의 처음 10 개 행 평균의 합계 결과 인 28 + 14입니다. 나는 각각의 매트릭스를 통과 할 수 있도록 내가이 과정을 싶습니다

sumD2 = sum(mean(D(11:end,2:end)),2) 
sumD2 = 

68 
sumA2+sumD2 

ans = 

86 

자동화 할 수 :

sumA2 = sum(A(3,2:end),2) 
sumA2 = 

18 

및 sumD2 : 두 번째 값은 것 A의 세 번째 행의 합은 sumA2 말할 수 있습니다 세포에서. 즉나는 희미과 세포의 x와 y로 시작하는 경우 :

x = 

[300x5 double] [300x5 double] [300x5 double] 
y = 

[2000x5 double] [2000x5 double] [2000x5 double] 

내가하고 싶은 결과는 어떤 명확한 일을 만들지 만 볼 수있는 경우

z = 

[300x1 double] [300x1 double] [300x1 double] 

나는 확실하지 않다 할 수 있습니다! 내가 제대로 모든 까다로운 사양을 얻기 위해 관리하는 경우

은 여기
+1

아주 잘 쓰여진 질문이지만 약간의 설명이 필요합니다. 어떻게 A의 첫 번째 행과 D의 처음 10 개의 행을 연관 지으셨습니까? 어떤 수준의 관용을 고려하고 있습니까? 그렇다면, 무엇? –

+0

안녕하세요 Roney, 명확히하기 : 첫 번째 열 (연도의 십진 요일)의 값이 D의 첫 번째 열에있는 첫 번째 값과 두 번째 값 사이의 범위에 있다는 사실을 기반으로 D의 처음 10 개 행이 선택됩니다 (이 데이터 집합의 동등한 십진수 일). 나는 이제 그것이 더 합리적이되기를 바랍니다. – user1912925

+0

죄송 합니다만 설명하기 위해 값을 사용할 수 있습니까? 또한 질문에 주석을 달아 편집하는 것이 좋을 것입니다. –

답변

2

잘 코드입니다 : 문제에서 주어진 xy를 들어

function z = foo(x, y) 
    z = x; 
    for i = 1:length(x) 
    z{i} = sum(z{i}(:, 2:end), 2); 
    dmin = 0; 
    for j = 1:size(x{i}, 1) 
     dmax = x{i}(j, 1); 
     t = y{i}(:, 1); 
     mask = t > dmin & t <= dmax; 
     if any(mask) 
     z{i}(j) = z{i}(j) + sum(median(y{i}(mask, 2:end)), 2); 
     end 
     dmin = dmax; 
    end 
    end 
end 

, 대답 z 내가 z{1} == z{2} == z{3}을위한, 그리고

>> z{1} 
ans = 
10 
42 
70 

"수정"섹션에서 D을 입력하면 내가 주장한대로 z{1}(3) == 86이 표시됩니다.

코드에 특별한 것은 없습니다. dmindmax은 , B 등의 행렬의 첫 번째 열 값을 기준으로 현재 날짜 범위를 유지합니다. if any(mask) 진술은 빈 배열에서 중간 값을 취하지 않도록하기 위해 필요합니다.이 값은 NaN의 벡터로 연결되어 합계를 높입니다.

관련 문제