Comparing two cell arrays of strings of different sizes
이전 댓글 표시
Dear all,
I'm trying to compare two cell arrays of strings, a lot like the following:
A = [X_ABCDE;X_BCDEA;X_BCED]
B = [X_A;X_B]
and the resulting array should be:
index = [1;2;2]
as I have a matrix D = [B, C] with C containing the cells I want to end up with.
I wanted to do it using a for-loop and a nested for-loop, but, as A is 8000x1 and D is 2000x2, this will take forever. I tried using strcmp and ismember, but these only work when the cells (or strings) are identical. strfind doesn't work either, because when I use strfind I need to have a for-loop over array A, and strfind only works if the smallest of both is a string.
for iCell = 1:length(A)
index = strfind(A(iCell), cell2mat(D(iCell,1)));
end
A string in B is ALWAYS shorter than in A and a string in B can occur more than once in A. I hope you can help me out :)
댓글 수: 2
Your state that: "I have a matrix D = [B, C] with C containing the cells I want to end up with". but if the matrix D is an output (i.e. is defined by what you "end up with"), then how can D be accessed within the loop?: D(iCell,1). How does D get defined if C is an output?
Jasper Admiraal
2015년 10월 27일
채택된 답변
추가 답변 (1개)
Jos (10584)
2015년 10월 27일
assuming B is all unique
A = {'X_ABCDE' ; 'X_BCDEA' ; 'X_BCE'}
B = {'X_A' ; 'X_B'}
index = arrayfun(@(k) find(strncmp(A{k},B,3)), 1:number(A))
댓글 수: 2
My solution is much faster than this one (100 iterations)
Elapsed time is 0.0370002 seconds. % my answer
Elapsed time is 1.623 seconds. % this answer
Using arrayfun is slower than using a loop.
Jos (10584)
2015년 10월 28일
of course it is. I just wanted to show a different answer ... :-)
카테고리
도움말 센터 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!