Azzera filtri
Azzera filtri

Extract values common to 5 columns

1 visualizzazione (ultimi 30 giorni)
Curious Mind
Curious Mind il 24 Gen 2020
Risposto: Star Strider il 24 Gen 2020
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 Commenti
Star Strider
Star Strider il 24 Gen 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 il 24 Gen 2020
Not at all. Not a homework.

Accedi per commentare.

Risposta accettata

Star Strider
Star Strider il 24 Gen 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.

Più risposte (1)

James Tursa
James Tursa il 24 Gen 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?

Categorie

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

Prodotti


Release

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by