how to compare every pair of rows and return a matrix?
    2 次查看(过去 30 天)
  
       显示 更早的评论
    
Hello guys, I have a matrix of 135 rows and 2 columns and I want to compare every two pairs of rows based on their overlapped elements and return a matrix.

 I have attached some rows from my matrix to make the question more clear
4 个评论
  Guillaume
      
      
 2018-5-22
				
      编辑:Guillaume
      
      
 2018-5-22
  
			It's not clear what a common element is. Not helped by the fact that there's probably a typo in if i take row2 and row2 they have 5 common elements since comparing something with itself is certain to say that everything is common.
Similarly, defines what compare means for you.
采纳的回答
  Jan
      
      
 2018-5-22
        I guess your matrix is a cell string and you want to find common sub-strings in it.
% Assuming your matrix is called "M":
n = size(M, 1);
% Convert the strings in the 2nd column to cell strings:
Sub = cell(1, n);
for k = 1:n
  Sub{k} = strtrim(strsplit(M{k, 2}, ','));
end
Match = cell(n, n);
for i1 = 1:n
  for i2 = i1+1:n
    v             = intersect(Sub{i1}, Sub{i2});
    Match{i1, i2} = v;
    Match{i2, i1} = v;   % Output is symmetric
  end
end
Or maybe you want ismember instead of intersect. Or you want to output the indices? Or the output should be a logical matrix, which is TRUE if the sub-strings have any overlap?
Please explain "compare every two pairs of rows" specifically. Most likely the above code can be adjusted easily.
更多回答(0 个)
另请参阅
类别
				在 Help Center 和 File Exchange 中查找有关 Characters and Strings 的更多信息
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


