2016-08-22 4 views
1

Ich versuche, meinen MATLAB-Code zu optimieren. Mein Code erfordert die Verwendung von histcounts Funktion über eine Million Vektoren in einer For-Schleife. Was ich tun möchte, ist direkt histcountsmex anstelle von histcounts zu verwenden. Kann jemand vorschlagen, wie man das macht? Dies ist meine Funktion:Verwenden von histcountsmex anstelle von histcounts

function th = sndmode(mh) 
    % this function will find the threshold 
    % the mode of the function that is not zero 
    [count, centers]=histcounts(mh,sort((mh))); % find the most repeated elements 
    [~, indxs]=sort(count,'descend'); % sort the result 
    centers=centers(indxs); 
    if centers(1)==0 % determine the first nonzero mode 
     th=centers(2); 
    else 
     th=centers(1); 
    end 
end 

Nun, wenn ich Profiler laufen, sagt es, dass 34 Sekunden auf der ‚histcounts‘ Funktion ausgegeben wird, aber 14 Sekunden ausgegeben wird auf ‚histcountsmex‘.

+0

Wie viele dieser Vektoren können Sie in Arbeitsspeicher auf einmal? –

+0

Die Länge jedes Vektors beträgt zwischen 10 und 50.000 Abtastungen. –

+1

Das beantwortet meine Frage nicht ... Auch warum sind Sie überzeugt, dass der Flaschenhals "Histogramme" ist? Bitte zeigen Sie uns einen Code, einschließlich was Sie bereits in Bezug auf 'histcountsmex' versucht haben. –

Antwort

0

fügen Sie histcountsmex.p Ihrem aktuellen Arbeitsweg hinzu. Es befindet sich in C: \ Programme \ MATLAB \ R2017b \ toolbox \ matlab \ datafun \ private \ histcountsmex.p

Verwandte Themen