2013-06-04 5 views
1

엄청난 양의 데이터가있는 파일이 있습니다. 가격에 대한 정보가없는 장소는 NaN으로 표시됩니다. 나는 모든 행을 지우고 싶습니다. 거기에 그런 이름이 있고, 누락 된 데이터가 많은 곳의 모든 열을 삭제하고 싶습니다 (비례 행렬이 필요하기 때문에).Matlab에서 주가를 분석하는 Nans를 제거하려면 어떻게해야합니까?

또한 모든 문자열에 대한 정보가있는 다른 문자열 (AssetList)이 있습니다. 열이 삭제되면 거기에 따라 삭제해야합니다.

나는 많은 도움을 주실 것입니다.

데이터 :

6,41 16,51 x  x 69,78 

6,22 16  x  x 68,48 

6,17 15,61 x  x 69,46 

x  x  x  x x 

x  x  x  x x 

x  x  x  x x 

5,83 15,14 x  x 69,85 

6,4  17,64 x  x 71,03 

6,07 16,04 x  x 68,64 

5,91 17,09 x  x 68,92 

6  18,19 x  x 68,72 

x  x  x  x x 

x  x  x  x x 

5,58 17,17 x  x 69,02 

5,3  16,83 x  x 67,69 

5,66 19,65 x  x 68,64 

5,65 20,86 x  x 69,45 

5,43 20,46 x  x 68,94 

x  x  x  x x 

x  x  x  x x 

5,58 2  0,16 x 68,73 

AssetList :

FLWS SRCE FUBC DDD MMM 
+0

정확히 무엇 결과가 맘에 들게 하시겠습니까? 'x'로 모든 행을 지우기 만하면 아무 것도 남지 않을 것입니다. –

+0

그는 모든 NaN이있는 행을 삭제하려고한다고 생각합니까? 하지만 열에 NaN이 많이 포함되어 있는지 잘 모르겠습니다 ... – Huguenot

+1

이렇게하면 시작해야합니다. http://stackoverflow.com/questions/5202680/matlab-how-to-efficiently-remove-nan-elements- from-matrix – Huguenot

답변

0

나는 완전히 당신의 질문을 이해하지 못했다으로, 여기에 몇 가지 가정을해야합니다.

다음 첫 번째는 NaN독점적으로의 존재하는 모든 행을 삭제하고, 포함 된 모든 열 적어도 하나의NaN을 삭제하여 계속 :

M = [ ... 
    6.41 16.51 NaN NaN 69.78       
    6.22 16  NaN NaN 68.48       
    6.17 15.61 NaN NaN 69.46       
    NaN  NaN  NaN NaN NaN       
    NaN  NaN  NaN NaN NaN       
    NaN  NaN  NaN NaN NaN       
    5.83 15.14 NaN NaN 69.85       
    6.4  17.64 NaN NaN 71.03       
    6.07 16.04 NaN NaN 68.64       
    5.91 17.09 NaN NaN 68.92       
    6  18.19 NaN NaN 68.72       
    NaN  NaN  NaN NaN NaN        
    NaN  NaN  NaN NaN NaN       
    5.58 17.17 NaN NaN 69.02       
    5.3  16.83 NaN NaN 67.69       
    5.66 19.65 NaN NaN 68.64       
    5.65 20.86 NaN NaN 69.45       
    5.43 20.46 NaN NaN 68.94       
    NaN  NaN  NaN NaN NaN       
    NaN  NaN  NaN NaN NaN    
    5.58 2  0.16 NaN 68.73]; 

AssetList = { 
    'FLWS' 'SRCE' 'FUBC' 'DDD' 'MMM' }; 

% Delete all-NaN rows 
M(all(isnan(M),2),:) = []; 

% Delete any-NaN columns 
colsToBeDeleted = any(isnan(M)); 
M(:, colsToBeDeleted) = [] 
AssetList(colsToBeDeleted) = [] 

결과 :

M = 
    6.4100 16.5100 69.7800 
    6.2200 16.0000 68.4800 
    6.1700 15.6100 69.4600 
    5.8300 15.1400 69.8500 
    6.4000 17.6400 71.0300 
    6.0700 16.0400 68.6400 
    5.9100 17.0900 68.9200 
    6.0000 18.1900 68.7200 
    5.5800 17.1700 69.0200 
    5.3000 16.8300 67.6900 
    5.6600 19.6500 68.6400 
    5.6500 20.8600 69.4500 
    5.4300 20.4600 68.9400 
    5.5800 2.0000 68.7300 

AssetList = 
    'FLWS' 'SRCE' 'MMM' 
+0

아, 그게 내가 찾고 있던 바로 그거야. 도와 줘서 고마워, Rody. 훌륭합니다. –