Extract values common to 5 columns

1 view (last 30 days)
Hi, I have a matrix A with 5 columns (1 to 5). I want to compare columns 1 through 5 and then extract values common to all 5 columns. Put the extracted values (common to all 5 columns) into a separate matrix called Match. Thank you!
  4 Comments
Star Strider
Star Strider on 24 Jan 2020
Is this homework? If so we can only give hints.
If it is not homework, I will post my general solution.
Curious Mind
Curious Mind on 24 Jan 2020
Not at all. Not a homework.

Sign in to comment.

Accepted Answer

Star Strider
Star Strider on 24 Jan 2020
Since it is not homework, see if this does what you want:
A = randi(9,20,5); % Create Matrix (Integers For Simplicity)
[Au,ia,ic] = unique(A); % Unique Elements (Use ‘uniquetol’ For Non-Integers)
[~,c] = ind2sub(size(A), (1:numel(A)).'); % Create Vector Of Column Indices
Tally = accumarray(ic,c,[],@(x){Au(x)}); % Accumulate By Column
ColsWithAu = cellfun(@(x)nnz(ismember(Au,x)), Tally); % Return Columns With Specific Elements
Common = Au(ColsWithAu==5) % If Element Appears In Every Column, It Is Common To All Columns
It worked for my test matrix.
If your rmatrix has floating-point elements, use uniquetol instead of unique. You will need to choose the appropriate tolerance value.

More Answers (1)

James Tursa
James Tursa on 24 Jan 2020
Hint: Look at the result of diff(A,[],2). If all the values in a row are equal, what would you expect to be in the result of this diff calculation? Can you devise a test base on this result to see if every value in a row is the same?

Products


Release

R2019b

Community Treasure Hunt

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

Start Hunting!