2016-09-19 2 views
0

위도가 LAT이고 위도가 LON이고 netCDF 파일에서 windspeed가 있습니다.MATLAB 지정된 값에 가장 가까운 행 및 열 인덱스 찾기

주어진 LAT에서 풍속을 찾고 싶습니다. LON 좌표 %Location of Met Mast 51.94341,1.922094888입니다. 나는 각각 LATLON 행렬에서 RefLATRefLON에 가장 가까운 값을 찾으려고합니다. LAT와 LON에서 가장 가까운 값을 얻었을 때이 위치에서 속도를 찾기 위해 주소를 사용할 것입니다.

아래 코드를 사용할 때 열과 행의 값이 각각 CLON, CLAT, RLATRLON 인 단일 값이 필요합니다. 대신에 나는 972 개 값의 배열로 CLON, CLAT, RLATRLON을 얻을, 나는 LATLON를 검색하고있는 행렬의 크기는 848 X 972

LAT = ncread('wind_level2.nc','latitude'); 
LON = ncread('wind_level2.nc','longitude'); 
wind = ncread('wind_level2.nc','wind'); 

LAT = double(LAT); 
LON =double(LON); 
%Location of Met Mast 51.94341,1.922094888 

RefLAT=51.94341; 
LATcalc = abs(LAT - RefLAT); 
[RLAT,CLAT]=find(min(LATcalc)); 

RefLON=1.922094888; 
LONcalc = abs(LON - RefLON); 
[RLON,CLON]=find(min(LONcalc));` 

감사 어떤 도움이다. 요청에 따라 감사

데이터 샘플 : @excaza에서 언급 한 바와 같이

LAT: 848x972 double:

51.6652641296387 51.6608505249023 51.6564369201660 51.6520233154297 51.6476097106934 51.6431961059570 51.6387825012207 
    51.6663322448731 51.6619186401367 51.6575050354004 51.6530914306641 51.6486778259277 51.6442642211914 51.6398506164551 
    51.6674041748047 51.6629867553711 51.6585731506348 51.6541595458984 51.6497459411621 51.6453323364258 51.6409187316895 
    51.6684722900391 51.6640548706055 51.6596412658691 51.6552276611328 51.6508140563965 51.6464004516602 51.6419868469238 
    51.6695404052734 51.6651229858398 51.6607093811035 51.6562957763672 51.6518821716309 51.6474685668945 51.6430549621582 
    51.6706047058106 51.6661911010742 51.6617774963379 51.6573638916016 51.6529502868652 51.6485366821289 51.6441192626953 
    51.6716728210449 51.6672592163086 51.6628456115723 51.6584320068359 51.6540145874023 51.6496009826660 51.6451873779297 
    51.6727409362793 51.6683235168457 51.6639099121094 51.6594963073731 51.6550827026367 51.6506690979004 51.6462554931641 
    51.6738052368164 51.6693916320801 51.6649780273438 51.6605644226074 51.6561470031738 51.6517333984375 51.6473197937012 
    51.6748695373535 51.6704559326172 51.6660423278809 51.6616287231445 51.6572151184082 51.6528015136719 51.6483840942383 
    51.6759376525879 51.6715240478516 51.6671066284180 51.6626930236816 51.6582794189453 51.6538658142090 51.6494522094727 

LON 848x972 double:

3.04663085937500 3.04491543769836 3.04320049285889 3.04148554801941 3.03977084159851 3.03805613517761 3.03634166717529 
3.03959774971008 3.03788304328918 3.03616857528687 3.03445434570313 3.03274011611938 3.03102612495422 3.02931237220764 
3.03256440162659 3.03085041046143 3.02913665771484 3.02742290496826 3.02570939064026 3.02399611473084 3.02228283882141 
3.02553081512451 3.02381753921509 3.02210426330566 3.02039122581482 3.01867818832397 3.01696562767029 3.01525306701660 
3.01849699020386 3.01678419113159 3.01507163047791 3.01335930824280 3.01164698600769 3.00993490219116 3.00822281837463 
3.01146292686462 3.00975084304810 3.00803875923157 3.00632715225220 3.00461530685425 3.00290393829346 3.00119256973267 
3.00442862510681 3.00271701812744 3.00100588798523 2.99929451942444 2.99758362770081 2.99587273597717 2.99416208267212 
2.99739408493042 2.99568319320679 2.99397253990173 2.99226188659668 2.99055147171021 2.98884129524231 2.98713135719299 
2.99035930633545 2.98864889144897 2.98693895339966 2.98522901535034 2.98351931571960 2.98180961608887 2.98010015487671 
2.98332428932190 2.98161458969116 2.97990512847900 2.97819590568543 2.97648668289185 2.97477769851685 2.97306895256043 
+2

데이터 샘플을 추가 할 수 있습니까? – Finn

+2

['find'] (http://www.mathworks.com/help/matlab/ref/find.html) 및 ['min'] (http://www.mathworks.com/help/)에 대한 설명서를 읽으십시오. matlab/ref/min.html). 구문을 사용하면'min'은 각 컬럼 ('[1x972]')의 최소값을 반환하고'find'는'min'의 리턴 값에서 * all * non-zero 요소의 인덱스를 포함하는 벡터를 반환합니다. – excaza

+1

시도해보십시오. [RLAT, CLAT] = find (min (min (LATcalc))); – Coriolis

답변

1

find 당신의 구문은 귀하의 경우 적합하지 않습니다. 비교 연산자가 없으면 find은 논리적 비교를 가정하고 0이 아닌 모든 요소의 색인을 포함하는 벡터를 반환합니다. 그것은 당신이 원하는 것이 아닙니다.

는 다음과 같은 시도 : eps 예를 0.00001에 대한 오류 허용 오차

[RLAT,CLAT]=find(LATcalc<eps); 

.

찾고있는 그림이 매트릭스에 없기 때문에 find에 완벽한 평등을 부여 할 수 없습니다. abs(LAT - RefLAT)을 사용하면 두 값의 차이가있는 행렬을 얻게됩니다. 이전과 마찬가지로 완벽한 0을 얻지 못할 수도 있으므로 최소 허용 오차보다 낮은 오차 허용 오차로 가장 가까운 결과를 0으로 찾습니다.

+0

불행히도 손에 잡힌 작업은 생각만큼 간단하지 않지만 솔루션이 첫 번째 단계에서 도움이됩니다. –

관련 문제