To determine the number of distinct pairs of value(s) in each column of matrix.

4 views (last 30 days)
Given that i have a 4 by N matrix, each entry of the matrix can take a random value from 1-6,
A = randi([1,6],[N 4])
I want to determine how many column(s) of the matrix have 2 distinct pairs of any two numbers from 1-6, for example [1;5;5;1] or [6;6;1;1]
First off, i want to start simply by checking say if the first column of A has 2 '1's and 2 '2's so we want to see if the column is the same as any of { [1;1;2;2;] , [1;2;1;2] , [1;2;2;1] .... }
I think you can do it like this:
valCount = hist( B(:,1) , uniqueVals )'==[2;2;0;0;0;0]
Then i want to generalise this so it can check every possible pairs of values and spit out the number of columns with two distinct pairs of numbers, but i have not a clue how to proceed.
Please if someone could kindly help

Accepted Answer

Turlough Hughes
Turlough Hughes on 15 Feb 2020
Edited: Turlough Hughes on 15 Feb 2020
You could do the following. First find rows where there is only one other element equal to the element in the first column
idx = find(sum( A(:,1)==A,2 )==2);
Then make a new array B from rows satisfying the first condition and separate two values that didnt equal the first column. Then find indices where the remaining pairs are equal:
B = A(idx,:).'; % temporarily transposing to facilitate the reshaping step
remPairs = reshape(B(B~=B(1,:)),2,[]).';
idx2 = remPairs(:,1)==remPairs(:,2); % index where remaining pairs are equal
A(idx(idx2),:)

More Answers (0)

Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!