How to compare rows of an array with other rows?

49 ビュー (過去 30 日間)
lucksBi
lucksBi 2018 年 1 月 19 日
コメント済み: lucksBi 2018 年 1 月 24 日
Hey.. How to compare rows of an array with rows defined in x?
array={[1,2,3,4,6,13,18,9];[13];[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.
please help.
  4 件のコメント
Jos (10584)
Jos (10584) 2018 年 1 月 19 日
and you do realise that you only have to process the unique values in x?

サインインしてコメントする。

採用された回答

Jan
Jan 2018 年 1 月 19 日
編集済み: Jan 2018 年 1 月 19 日
The question is not clear, but I guess a code which produces the output:
array = {[1,2,3,4,6,13,18,9];[13];[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
  4 件のコメント
lucksBi
lucksBi 2018 年 1 月 24 日
Problem solved. thanks alot for your time.

サインインしてコメントする。

その他の回答 (1 件)

Birdman
Birdman 2018 年 1 月 19 日
編集済み: Birdman 2018 年 1 月 19 日
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 件のコメント
lucksBi
lucksBi 2018 年 1 月 20 日
Thank You so much for your time. this is really helpful.

サインインしてコメントする。

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by