how to get common elements of matrix based on another matrix?

1 ビュー (過去 30 日間)
lucksBi
lucksBi 2018 年 1 月 5 日
コメント済み: lucksBi 2018 年 1 月 5 日
hey all
how to get common elements of array1 based on 'rows' array?
array1 = {[1,5,7,2];[1,4,6,2];[1,4,5]}
rows = {[2,3];[1,3];[1,2]}
result{1,1} = {[];[1,2];[1,5]} % compare row1 with row1 in array1 then row1 with row2 then row1 with row3
result{2,1} = {[1,2];[];[1,4]} % compare row2 with row1 in array1 then row2 with row2 then row2 with row3
result{3,1} = {[1,5];[1,4];[]} % compare row3 with row1 in array1 then row3 with row2 then row3 with row3
if we consider rows{1,1} then comparision will be between row 1 and other rows in aaray1 and so on.
  11 件のコメント
lucksBi
lucksBi 2018 年 1 月 5 日
@Birdman @Guillaume Thanks to both of you for giving time to my query. I am accepting the more close answer to what i wanted. Thank You

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

採用された回答

Guillaume
Guillaume 2018 年 1 月 5 日
Still don't know what the actually result should be since you haven't explained why row 1 is compared to itself when it's not in rows. Ignoring this, and just comparing row i to the rows listed in rows{i} this will work:
result = cellfun(@(ar, r) arrayfun(@(rr) intersect(ar, array1{rr}), r, 'UniformOutput', false), array1, rows, 'UniformOutput', false)
result is a cell array the same size as rows and array1. Each cell of result is itself a cell array the same size as rows{i}.
  1 件のコメント
lucksBi
lucksBi 2018 年 1 月 5 日
Yes its closer to what i want. Thank You so much for your time.

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

その他の回答 (1 件)

Birdman
Birdman 2018 年 1 月 5 日
One approach(with a for loop):
for j=1:size(rows,1)-1
for i=1:size(array1,1)
result{i,j}=array1{i}(ismember(array1{i},rows{i}(j)));
end
end
Note: the ones with no intersect are eliminated, therefore the result is 3x2 cell.
  7 件のコメント
lucksBi
lucksBi 2018 年 1 月 5 日
Yes i am trying to modify it. Thanks alot

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

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by