setdiff for two matrices
8 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Hi,
I have two large matrices with the same number of rows but a different number of columns. Let's say A is the larger matrix and B is the smaller one.
Values in each row of the matrix B are a subset of the values of the corresponding row in A. The goal is to have another matrix C which in each row contains the values from the corresponding row of A which are not in corresponding row of B. In other words, I want to use the setdiff(A,B) command, but it should act row by row. Any idea how can I do this without looping?
Thank you!
0 Commenti
Risposte (2)
Guillaume
il 18 Mar 2016
Modificato: Guillaume
il 18 Mar 2016
I'm afraid there's no other way than looping over the rows either explicitly with a for loop, or with cellfun:
cell2mat(cellfun(@setdiff, num2cell(A, 2), num2cell(B, 2), 'UniformOutput', false))
Note that the above assumes that setdiff returns the same number of elements for each row. Otherwise, you'll have to get rid of the cell2mat call and keep the result as a cell array.
Also, note that an explicit loop may be faster as you wouldn't have to split the inputs into cell arrays of rows.
Fangjun Jiang
il 18 Mar 2016
setdiff(a,b,'rows') ??
4 Commenti
Fangjun Jiang
il 24 Apr 2018
just use setdiff(A(k,:), B(k,:)) and loops through all rows. What is the point to struggle to avoid a loop?
Vedere anche
Categorie
Scopri di più su Matrix Indexing 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!