Deleting rows with identical values in determined columns of two matrices.
1 view (last 30 days)
Show older comments
Hello. I have two large matrices with the next dimensions
Matrix a = 6700 x 8.
Matrix b= 388000 x 8
As a note, I would like to say that both "matrix a" and "matrix b", column 1 to column 4 are time data (year, month, day, hour), and from column 5 to column 8 are data measurements.
It is required a routine which compares column 1 to column 4 from "matrix a" with column 1 to column 4 from "matrix b", finds the elements repeated in column 1, column 2, column 3 and column 4 of both matrices, and finally deletes all this rows only in "matrix b", generating a "new matrix b". Also is desirable that the "new matrix b" has an ascending order taking into account only column 1 to column 4, due to this columns are the time data.
For instance:
Matrix a = [2009,10,2,2,0,0,0,0; 2009,10,2,2,0,0,0,0; 2009,10,9,5,0,0,0,0]
Matrix b = [2012,10,9,5,1,2,3,4; 2009,10,9,5,3,9,7,1; 2012,10,9,5,1,2,3,4]
New Matrix b => [2012,10,9,5,1,2,3,4; 2012,10,9,5,1,2,3,4]
In this example, "matrix b" has in the second row, the same elements that are present in the third row of "matrix a", only taking into account column 1 to column 4 of both matrices (the data repeated are 2009,10,9,5). For this reason, the entire second row of "matrix b" is eliminated in the "new matrix b".
I want to implement this kind of solution to my whole "matrix b", which has dimensions of 388000 x 8.
Thanks in advance.
0 Comments
Accepted Answer
Azzi Abdelmalek
on 28 Dec 2015
a = [2009,10,2,2,0,0,0,0; 2009,10,2,2,0,0,0,0; 2009,10,9,5,0,0,0,0]
b = [2012,10,9,5,1,2,3,4; 2009,10,9,5,3,9,7,1; 2012,10,9,5,1,2,3,4]
out=b(~ismember(b(:,1:4),a(:,1:4),'rows'),:)
More Answers (0)
See Also
Categories
Find more on Logical in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!