2013-05-13 3 views
1

Matlab에서 추적기 필드의 평균을 계산하려고하지만 필드를 구성하는 셀의 크기가 다릅니다.matlab에서 고르지 않은 가중치에 대한 평균을 계산하십시오.

T = 
1 3 5 8 
2 1 4 3 
2 1 9 1 
20 8 3 1 

그리고 난이 개 더 많은 필드를 가지고 dxT을 구성하는 세포의 크기를 설명 dy 예를 들어, 내 추적 필드입니다.

dx = 
1 1 2 3 
1 1 2 3 
1 1 2 3 
1 1 2 3 

dy = 
3 3 3 3 
3 3 3 3 
2 2 2 2 
1 1 1 1 

그래서, 직관적, dxdy는 동안 추적 필드 T의 왼쪽 하단 모서리가 T의 평균의 계산에 작은 기여를해야한다고 말해 오른쪽 상단 구석이 가장 큰 기여를해야합니다.

나는 처음 mean(mean(T))을 시도, 그러나 이것은 분명히 같은 것을 사용하여, 나는 철저 수동으로 평균을 계산하고 가중치를 포함 거라고 생각 조사의 조금 후에 T 등의 왼쪽 하단의 중요성을 비중 확대 이 :

T_mean_i = sum(T*dx)./sum(dx) 

그리고 dy 유사한, Y 방향의 셀 폭. 그러나이를 구현하는 방법을 잘 모르겠습니다.

편집 : 다음은 내 질문에 대한 자세한 내용입니다.

내 눈금은 260 * 380 셀이므로 size(dy) = size(dx) = 260-by-380입니다. 추적 필드는 표면 플럭스 필드, 예를 들어 sflux을 비슷한 크기의 염분 필드 인 salt으로 나눔으로써 계산됩니다. 따라서 size(sflux) = size(salt) = 260-by-380-by-1000, 여기서 시간 차원은 길이가 1000입니다.

나는 각 시간 단계 ii에서 셀 너비 필드의 가중치, dxdy을 포함 sflux(:,:)./salt(:,:,ii)의 평균을 찾고 싶어요. (for-loop를 사용하지 마십시오. 걱정하지 마세요!)

내가하고있는 일을 제대로 수행하고 있습니까? 아니면 내가 잘못 생각한거야? 언제든지 설명을 요청하십시오.

건배!

+2

각 요소의 크기 : 해당 위치에 'dx' 및'dy '** 제품 ** 또는 ** sum **? – Shai

+1

음,'dy. * dy'는 각 셀의 영역입니다. 그래서, 제가 생각하기에, 각 세포의 면적은 평균을 위해 주어져야하는 가중치를 결정합니다. 내 유일한 관심사는 그 결과가 * 정규화 *되었습니다. ... –

+0

슈퍼 빠른 답변 주셔서 감사합니다 ... 나는 필드가 실제로 3 차원 (세번째 희미 함)이므로'(:) '를 사용하지 않았습니다. 시간을 나타내는). 그래서, 나는 각 시간 단계에서 평균을 계산하고 싶다. '(:)'를 사용하는 것은 항상 의미합니다. –

답변

3

meansum은 단일 치수를 따라 동작한다.만약 수

w = dx .* dy; 
sum(w(:)) 

는 3-D 어레이의 각 계층에 대한 원하는 평균을 구하려면, 예를 들면, 제 사용한 컬럼하는 벡터 colon operator (:)에 데이터 변환의 전체 매트릭스에 적용하려면 이것은 각각의 시간 단계에서의 평균 값에 대응하는 요소 어레이를 생성 T_mean

T = sflux ./ salt; %// Tracer field 
w = dx .* dy;  %// Weights 
T_mean = sum(reshape(bsxfun(@times, T, w), [], size(T, 3)))/sum(w(:)); 

: 같은 것을.

설명 : bsxfun(@times, T, w)은 각 요소를 가중치에 따라 요소별로 배수입니다. 결과 가중 3 차원 배열은 2 차원 배열로 재 형성되어 각 열이 콜론 연산자와 비슷한 다른 열로 변환 된 다음 모든 것이 가중치의 합으로 정규화됩니다.

+1

니스! 편집 된 응답을 주셔서 감사합니다 - 그리고 확실히'bsxfun'을 사용하는 것과 같습니다 - 나를 위해 몇 가지를! –

+1

@David_G 도와 드리겠습니다 :) –

+0

도움 주셔서 감사합니다 @EitanT! 이 기술에 대한 질문이 있습니다. 'SomeMatrix = bsxfun (@ times, T, w)'는'260 * 380-by-1000' 크기의 2D 행렬로 재구성됩니다. 각 행의 요소 (즉, 260 * 380의 요소)가'SomeMatrix (:, :, 1)'에서 비롯된 것임을 어떻게 확신 할 수 있습니까? 바꾸어 말하면,'SomeMatrix'가 다시 형성 될 때, 나중에 timestep에서 ** no ** 요소가 다시 형성된 행렬에 처음 소개된다는 것을 어떻게 알 수 있습니까? –

1

당신은 당신이 여기 요소 -wise 제품 .* 아닌 매트릭스 제품 * 사용해야

sum(T(:).*dx(:).*dy(:))./(sum(dx(:).*dy(:)) 

참고하여 작업을 수행 할 수 있습니다.

+0

빠른 응답을 보내 주셔서 감사합니다. 좋은 대답도 있지만, @ EitanT의 대답은 약간 더 적절했습니다 :) 건배 동료! –

관련 문제