2 views (last 30 days)

Show older comments

A = [1 2

2 6

2 3

2 7

3 4

5 4

6 3

4 7]

i have matrix A,

if i select B=2, i want output as 1 2 3 6 7, it shows relatiionship of 2

if i select B=3, i want output as 2 3 4 6, it shows relatiionship of 3

Walter Roberson
on 29 Jan 2021

Edited: Walter Roberson
on 29 Jan 2021

A = [1 2

2 6

2 3

2 7

3 4

5 4

6 3

4 7]

B = 2

unique([B; A(A(:,1) == B,2); A(A(:,2) == B,1)]).'

However, the basis for including the number itself is not clear. If B does not occur at all in A, then I would argue it would be more appropriate for the result to be empty than for it to include B itself.

Walter Roberson
on 29 Jan 2021

B = 12345;

n = 5e7;

A = randi(n/2000,n,2);

tic

z1 = unique([B; A(A(:,1) == B,2); A(A(:,2) == B,1)]).';

toc

tic

[r, ~] = ind2sub( size(A), find(A==B) );

z2 = unique( A( r ,: ) )';

toc

tic

z3 = unique(A(any(A == B,2),:)).';

toc

Paul Hoffrichter
on 29 Jan 2021

B = 3;

[r, ~] = ind2sub( size(A), find(A==B) );

z = A(sort(r),:);

zu = unique(z(:))'

Paul Hoffrichter
on 29 Jan 2021

Don't need the sort, so this is faster:

[r, ~] = ind2sub( size(A), find(A==B) );

z = unique( A( r ,: ) )'

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

Start Hunting!