Find match for a pair of rows in cell arrays
4 次查看(过去 30 天)
显示 更早的评论
I have 2 cell arrays of equal length, e.g.
>> alfa = {'a'; 'b'; 'c'; 'b'; 'a'; 'c'}
alfa =
'a'
'b'
'c'
'b'
'a'
'c'
>> beta = {'b'; 'd'; 'a'; 'd'; 'a'; 'a'}
beta =
'b'
'd'
'a'
'd'
'a'
'a'
and I want to find where the pairs are repeated, which pair is it and the index where the repeated pairs are located.
So, in this case the index 2 and 4 correspond to the repeated pair 'b' and 'd', and the index 3 and 6 correspond to the repeated pair 'c' and 'a'. It is important that I know which pair is it and all the indexes where this pair is repeated.
Thank you.
1 个评论
Adam
2016-9-29
What is the significance of having two cell arrays? I don't see what the relevance of the 2nd one is other than just as another example. Is it supposed to be used in some way?
采纳的回答
dpb
2016-9-29
编辑:dpb
2016-9-29
Adam's on the right track, just didn't quite recognize the problem description--
>> ab=[char(alfa) char(beta)]; % mush the two arrays together
>> [u,ia,ib]=unique(ab,'rows'); % get the combinations that are extant
>> u(histc(ib,unique(ib))>1,:) % find the ones with more than one occurrence
ans =
bd
ca
>>
The alternate returns from histc and unique will provide the positions.
0 个评论
更多回答(1 个)
Adam
2016-9-29
编辑:Adam
2016-9-29
[C, ia, ic] = unique( alfa );
should give you this information. The C vector gives the characters and the ic vector tells you where they occur so repeated indices show the locations of the same letter.
[C, ia, ic] = unique( alfa )
C =
'a'
'b'
'c'
ia =
1
2
3
ic =
1
2
3
2
1
3
3 个评论
dpb
2016-9-29
He stated he had two cell arrays only you must consider them together by row--see my response. Simplest way is as done there to convert to a 1D character vector as the 'rows' option doesn't work for cellstr arrays, unfortunately. (Why not is anybody's guess... :( )
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!