MATLAB: If a value in one matrix matches that in another matrix, how to assign the same index number

align valuesassign values

I have a matrix with a list of latitude and longitude coordinates (64,800×3). Each latitude and longitude pair have their own index number.
Ex.
[Index Lat Lon;
10521 -45.5 50.5;
10522 -45.5 51.5;
10523 -45.5 52.5]
I have another matrix with a list of latitude and longitude numbers, but no index numbers. Also, this matrix is not the same size as the previous matrix. (250×2; It has Lat and Lon only, no index number yet.)
I want to write a script that will examine the pairs of latitude and longitude coordinates for each matrix. When there is a pair that matches between the matrices, it would assign the same index number to the second matrix from the first matrix.

Best Answer

  • Sure you can. You can use the find function to find the index at which the 2nd and 3rd column match, and then copy the elements over.
    Your code could look like this:
    origMat = [10521 -45.5 50.5;
    10522 -45.5 51.5;
    10523 -45.5 52.5];
    newMat = [0 -45.5 52.5;
    0 -45.5 52.5;
    0 -45.5 51.5;
    0 -45.5 50.5];
    % Loop through the new matrix
    for ii = 1:size(newMat,1)
    % Find the index location where 2nd and 3rd column match
    idxLocation = origMat(:,2)==newMat(ii,2) & ...
    origMat(:,3)==newMat(ii,3);
    % If valid, set the index number (1st column) of the new matrix
    if ~isempty(idxLocation)
    newMat(ii,1) = origMat(idxLocation,1);
    end
    end
    format short g
    newMat
    This gives me
    newMat =
    10523 -45.5 52.5
    10523 -45.5 52.5
    10522 -45.5 51.5
    10521 -45.5 50.5