# counting strings in cell array, is there a faster solution

2 views (last 30 days)
Scragmore on 27 Jan 2012
Commented: Manduna Watson on 30 Jun 2014
Hi all.
I have two cell array's test1 240000x1 and test2 160000x1. Each cell of test1 contains a string, varying lengths 1-20 charicters. test2 is a list of unique entries from test1.
I wish to count the number of occurrences of each unique string in test2 in test1.
example strings in test1 & 2
test1 = {'ayooy'; 'ayta'; 'a'; 'aa'; 'aatl'; 'aatla'; ......};
test2 = {'a'; 'aa'; 'aaa'; 'aaaa'; 'aaaaa'; 'aaaac'; .......};
My code;
for ii = 1:length(test2)
b = ismember(test1,test2(ii,1));
test2{ii,2}(1,1) = sum(b);
end
Is there a way to speed this up or an alternative method that is faster. I know I am running a lookup that is 160k * 240k = 40,000 mill.
Thanks for you time

Walter Roberson on 27 Jan 2012
When you construct test2, use a different form of unique:
[test2, ua, ub] = unique(test1);
After that, the counts are:
test2counts = histc(ub, 1:length(test2));
##### 2 CommentsShow NoneHide None
Scragmore on 28 Jan 2012
Thanks for highlighting the additional output of unique and introducing me to new function histc. Worked a treat, supper fast compared to what I was originally doing.
Cheers,
Manduna Watson on 30 Jun 2014
Thank you, this really helped me to identify and count repeated characters in my data set

### Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

### Community Treasure Hunt

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

Start Hunting!