counting strings in cell array, is there a faster solution

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
AD

 采纳的回答

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 个评论

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,
AD
Thank you, this really helped me to identify and count repeated characters in my data set

请先登录,再进行评论。

更多回答(0 个)

类别

在 帮助中心 和 File Exchange 中查找有关 Test Scripts 的更多信息

产品

标签

Community Treasure Hunt

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

Start Hunting!

Translated by