MATLAB 查找最接近指定值的行和列索引

MATLAB find row and column index of closest to specified value

我有来自 netCDF 文件的纬度 LAT、经度 LON 和风速。

我想找到给定 LAT、LON 坐标 %Location of Met Mast 51.94341,1.922094888 处的风速。我试图分别在 LATLON 矩阵中找到最接近 RefLATRefLON 的值。当我在 LAT 和 LON 中获得最接近的值时,我将使用这些地址来定位我在该位置的风速。

当我使用下面的代码时,我希望每个列值和行值 CLON, CLAT, RLATRLON 都有一个值。相反,我得到 CLON, CLAT, RLATRLON 作为 972 个值的数组,我正在搜索的矩阵 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));`

感谢任何帮助。谢谢

请求的数据样本:

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

正如@excaza 所指出的,您的 find 语法不适合您的情况。没有任何比较运算符,find 假定逻辑比较并将 return 包含所有非零元素索引的向量。那不是你想要的。

尝试以下操作:

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

其中 eps 是误差容限,例如 0.00001。

您不能给出 find 完全相等,因为您要查找的数字可能不在矩阵中。使用 abs(LAT - RefLAT),您将得到两个值之间的差值矩阵。和以前一样,您可能没有完美的零,因此您可以通过足够低的误差容限找到最接近零的结果,以确保达到最小值。