2016-08-22 5 views
1

私はMATLABコードを最適化しようとしています。私のコードでは、forループの百万を超えるベクトルの機能をhistcountsが使用する必要があります。私がしたいのはhistcountsの代わりにhistcountsmexを直接使うことです。誰もそれを行う方法を提案することはできますか? これは私の関数である:histcountsの代わりにhistcountsmexを使用する

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 

私はプロファイラを実行すると、それは34秒が「histcounts」関数に費やされているが、14秒が「histcountsmex」に費やされているという。

+0

これらのベクトルのうち、どれくらいの数を一度にメモリに収めることができますか? –

+0

各ベクトルの長さは10〜50,000サンプルです。 –

+1

それは私の質問に答えることはできません...また、なぜボトルネックが「ヒストカウント」であると確信していますか? 'histcountsmex'について既に試したことを含め、いくつかのコードを見せてください。 –

答えて

0

現在の作業パスにhistcountsmex.pを追加します。 C:¥ProgramFiles¥MATLAB¥R2017b¥toolbox¥matlab¥datafun¥private¥histcountsmex.p

関連する問題