Azzera filtri
Azzera filtri

How to find a subset matrix in the main matrix and build a new matrix

3 visualizzazioni (ultimi 30 giorni)
Hi everyone,
Suppose I have two matrices A and B. The matrix A is a subset of matrix B (it can be possible that some of arrays or rows of matrix A were missing in matrix B). There is an ID column in the matrix B that rows with a unique ID can be used in building of matrix C.
If there is a similar row of matrix A in the matrix B, then copy this row to the matrix C. In addition, if there is more than one similar unique ID in the matrix B, then copy those ones as well in the matrix C.
For example: second row in matrix A [3,6,8,7,5] is found in the tenth row in the matrix B. Also, there are more than on unique ID (4), then both tenth and eleventh row of matrix B is copied in the matrix C.
Input:
A = [2,4,5,6,7;3,6,8,7,5;2,3,9,8,1;1,8,2,9,2;3,4,5,8,6;7,8,6,5,4;7,9,5,1,2;6,5,2,1,1;4,9,2,3,4;1,8,7,2,6];
B = [1,4,8,9,7,1;2,3,9,8,1,1;8,7,5,1,3,2;6,6,2,9,7,2;1,2,3,1,4,3;3,4,5,8,2,3;2,5,6,9,7,3;1,3,6,7,2,3;4,9,8,7,6,3;3,6,8,7,5,4;1,2,8,3,7,4;7,9,5,1,2,5;1,5,9,7,2,6;6,5,7,1,2,6;1,8,2,9,2,6;7,8,9,1,3,7;1,3,5,4,8,7;1,6,9,7,1,7;4,5,9,7,2,8;1,2,3,6,9,8;7,8,9,9,1,9;4,7,2,3,1,9;5,6,8,9,7,9;6,8,2,4,1,10;1,8,7,2,6,10;2,3,5,9,7,11;7,5,6,9,3,11;6,5,2,1,1,11;2,3,6,7,8,12];
Output:
C = [3,6,8,7,5,4;1,2,8,3,7,4;1,4,8,9,7,1;2,3,9,8,1,1;1,5,9,7,2,6;6,5,7,1,2,6;1,8,2,9,2,6;7,9,5,1,2,5;2,3,5,9,7,11;7,5,6,9,3,11;6,5,2,1,1,11;6,8,2,4,1,10;1,8,7,2,6,10];
Thanks.

Risposta accettata

Guillaume
Guillaume il 5 Set 2014
Modificato: Guillaume il 5 Set 2014
I assume that the order of the rows in C don't matter:
[~,~, ib] = intersect(A, B(:, 1:5), 'rows'); %find rows of A in B
ids = B(ib, 6); %get the ID of those rows
C = B(ismember(B(:, 6), ids), :); %get rows whose ID match

Più risposte (0)

Categorie

Scopri di più su Matrices and Arrays in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by