finding equal (lon,lat) in another matrix of different size
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Geraldine Maria Palacios Torres
am 20 Okt. 2021
Kommentiert: Geraldine Maria Palacios Torres
am 21 Okt. 2021
I have 2 matrices:
A = lon, lat, pressure, temperature
B = lon, lat, depth
A size is bigger than B
I am trying to merge the data from A, B to obtain: (lon, lat, pressure, depth, Temperature)
My logic is:
- Identify values in which latA=latB AND lonA,lonB
- export both columns : lon, lat
- add pressure, depth and temperature values to the final matrix
The problem I face is that I want to
treat (lon, lat) as a one single column so that values do not split(?) like a row
and giving the different size in the two matrices, I want to tell matlab to compare one element (Alat1) with all the elements in B-lat column
I found I could use something like this:
lonMatch = ismember(A(:,1), B(:,1));
latMatch = ismember(A(:,2), B(:,2));
latlonMatch = lonMatch & latMatch; %of course the these 3 lines can be put into 1
Final matrix = A(latlonMatch, 3:end);
I am new to this kind of problem and I do not know how to approach it :(
0 Kommentare
Akzeptierte Antwort
Johan
am 20 Okt. 2021
Bearbeitet: Johan
am 20 Okt. 2021
I'm not sure exactly what you mean by A is bigger than B, if you can give a simple example of A and B it would help in helping you :).
I have put a small example below with bogus values maybe this will help. All in all I do somehting very similar to what you proposed.
A = [1, 2, 50, 300; 1, 3, 65, 305]
B = [1, 2, 150]
list = and(abs(A(:,1)-B(:,1))<eps,abs(A(:,2)-B(:,2))<eps); % find matching values
C = A; %initiate final matrix
C(:,end+1) = NaN; %create a new column filled with NaN
C(list,end) = B(list,end) %Replace NaN by values of B in matching rows
3 Kommentare
Johan
am 20 Okt. 2021
Bearbeitet: Johan
am 20 Okt. 2021
Okay, then I guess the code I put before should work (swap A and B though has B as more row than A). You will not get the data of A that have no match in B though, I don't know if that is an issue. Also there are missing absolute value in the logical check (I edited my previous answer)
list = and(abs(A(:,1)-B(:,1))<eps,abs(A(:,2)-B(:,2))<eps)
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Oceanography and Hydrology finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!