How to speed up find and unique
7 次查看(过去 30 天)
显示 更早的评论
I did the profiling where unique and find take the most of time.
I use find as I want to know the row and column index of the 1 elements in a. For unique, I only need the index.
a=randi([0 1], 20000,8736);
temp=randi(8737, 4000,1000);
for i=1000
[aa0,aa00]=find(a(:,temp(:,i))==1);
[~,aa001,~]=unique(aa00);
end
May I know how to speed up? Thank you.
2 个评论
Walter Roberson
2018-4-26
I think your aa001 should be equivalent to
aa001 = find(diff([0; aa0]));
which is an abbreviation for
aa001 = [1; find(diff(aa0) ~= 0)];
which is looking for the places where aa0 changes.
Potentially faster would be
aa001 = [1; find(aa0(1:end-1) ~= aa0(2:end))];
but with the two intermediate arrays you would really have to do a timing test to be sure which variation was faster.
回答(0 个)
另请参阅
类别
在 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!