# How to compare rows of an array with other rows?

19 views (last 30 days)
lucksBi on 19 Jan 2018
Commented: lucksBi on 24 Jan 2018
Hey.. How to compare rows of an array with rows defined in x?
array={[1,2,3,4,6,13,18,9];;[12,1,2,5];[3,4];[1,5,6]}
x=[1;3]
comparison will be based on x. e.g. first element in x is 1 so it will compare 1st row of array with all other rows. 2nd element is 3 so 3rd row will be compared will all other rows. Comparison will get intersection of elements like:
result{1,1}= {[13;[1,2];[3,4];[1,6]]}
result{2,1}= {[[1,2];0;0;[1,6];[1,5]]}
0 means no common element was found.
Jos (10584) on 19 Jan 2018
and you do realise that you only have to process the unique values in x?

Jan on 19 Jan 2018
Edited: Jan on 19 Jan 2018
The question is not clear, but I guess a code which produces the output:
array = {[1,2,3,4,6,13,18,9];;[12,1,2,5];[3,4];[1,5,6]}
x = [1;3];
Result = cell(1, numel(x));
n = numel(array);
for ix = 1:numel(x)
index = x(ix);
A = array{index};
B = cell(1, n - 1);
iB = 0;
for ia = 1:n
if ia ~= index
iB = iB + 1;
Inter = intersect(A, array{ia});
if isempty(Inter)
Inter = 0;
end
B{iB} = Inter;
end
end
Result{ix} = B;
end
It might help to save time, if you sort the arrays at first:
for k = 1:numel(array)
array{k} = sort(array{k});
end
lucksBi on 24 Jan 2018
Problem solved. thanks alot for your time.

Birdman on 19 Jan 2018
Edited: Birdman on 19 Jan 2018
Another approach for your problem, which is shorter:
for i=1:numel(x)
temp=setdiff(1:size(array,1),x(i));
for j=1:numel(temp)
result{j,i}=intersect(array{x(i),1},array{temp(j),1});
end
end
##### 2 CommentsShow 1 older commentHide 1 older comment
lucksBi on 20 Jan 2018