2011-10-20 14 views
1
import numpy 

def euclideanClassification(punto1, punto2): 
    return (numpy.dot(punto2, punto1) - ((1.0/2.0) * numpy.dot(punto1, punto1))) 

私はこの機能のパフォーマンスを向上させようとしていますが、どうすればよいか分かりません。この機能のパフォーマンスをどのように改善しますか?

この関数は、パターン認識で使用されるユークリッド距離の変形です。

+1

「punto1」と「punto2」のサイズは? – NPE

答えて

3

私は間違っていない場合、その式はこれに相当する必要があります:

numpy.dot(punto2 - 0.5 * punto1, punto1) 

いますが、このようにそれを書いた場合、理論的には、それは少し速くする必要がありますので、あなたは、3回の乗算を保存します。

0

Cythonをそのタスクに使用できます。

[Cython]は、オプションの静的型宣言を可能にする余分な構文を持つPythonに基づいたプログラミング言語です。これは、高度でオブジェクト指向の、機能的でダイナミックなプログラミングを提供する[Python]言語のスーパーセットになることを目指しています。ソースコードは最適化されたC/C++コードに変換され、Python拡張モジュールとしてコンパイルされます。これにより、非常に高速なプログラム実行と、外部のCライブラリとの緊密な統合が可能になり、Python言語がよく知られている高いプログラマの生産性が維持されます。