2013-04-30 3 views
0

시뮬레이션 데이터는 NaN과 NaN이 아닌 50,000 x 1 크기의 벡터에 있습니다. 비 NaN을 평균하고 싶지만, 함수 nanmean은 NAN을 반환합니다. NAN을 제거하려고 시도했지만, 단지 0의 벡터 만 얻습니다. 시각적 검사를 통해이 벡터의 진정한 의미가 실제로 NaN인지 의심 스럽습니다.Matlab은 NaN과 NaN이 아닌 벡터에서 NAN 만 리턴합니다.

또한이 벡터를 사용하여 여러 다른 벡터와 공분산을 계산하고 싶습니다 (어느 시점에서). 나의 대안은 Excel에서 이것을하는 것이고 그것은 고통 스러울 것이다.

의견이 있으십니까?

meanA = mean(A(isfinite(A))); 

답변

7

이의이 벡터 A에 저장으로 데이터를 가정 해 봅시다 감사 유한 한 숫자 값만 포함하는 벡터가 있고 여기에 NaN이 있으면이 솔루션은 매우 간단합니다.

벡터에 유한 값이 아닌 경우에만 문제가 발생합니다. 이 경우 @ Ryan에서 제안한대로 필터링하여 필터링 할 수 있지만 실제로는 벡터의 평균을 계산하지 않는다는 것을 알아야합니다.

당신이 벡터 vw이 가정, 대신 공분산 및 좋아하는의 계산에 관하여

nanmedian(A) 

처럼 뭔가에 관심이있을 수 있는지 자신에게 물어, 나는 당신이 뭔가를 추천 할 것입니다 like :

idx = isfinite(v) & isfinite(w); 
cov(v(idx),w(idx)) 
+0

또한 NaN을 반환합니다. 이것이 내 벡터의 진정한 평균이 실제로 NaN이라는 것을 의미합니까? 나는 이것이 사실이라고 믿는 데 어려움을 겪는다. –

+0

이 코드는 NaN이 아닌 모든 요소를 ​​선택합니다. 그래도 NaN 결과를 얻으면 벡터에 유한 요소가 포함되지 않습니다. 'size (A (~ isnan (A)))'를 시도하면 어떻게됩니까? – craigim

+0

어떤 이유에서든 벡터가'-Inf'뿐만 아니라'Inf'도 포함하고 있다면,'NaN'을 제거해도 평균값은'NaN'이 될 수 있습니다. 'Inf'와'-Inf'가 합쳐지면'NaN'이 생성됩니다. –

0

가정 :

당신이 NaNs을 제외 벡터의 평균을뿐만 아니라 Inf-Inf 값을 통해 할 수 있습니다, 당신은

관련 문제