6

重複の可能性:
scipyとnumpyの関係

たとえば、NumPyにはウィンドウ関数 、、、、、がありbartlett、SciPyにはこれらとさらにいくつかの関数がありますが、同じ出力を生成するようです。blackmanhamminghanningkaiser

NumPyにはnumpy.fft.fft2(a, s=None, axes=(-2, -1))

SciPyにはscipy.fftpack.fft2(x, shape=None, axes=(-2, -1), overwrite_x=0)

なぜ重複があるのですか?下位互換性のためだけですか?もしそうなら、なぜそれらは異なる場所で異なって定義されているのですか?何か新しいものを書くとき、私はどちらを好むべきですか?

4

1 に答える 1

19

SciPy FAQから:

理想的な世界では、NumPyには、配列データ型と最も基本的な操作(インデックス作成、並べ替え、再形成、基本的な要素ごとの関数など)しか含まれていません。すべての数値コードはSciPyに存在します。ただし、NumPyの重要な目標の1つは互換性であるため、NumPyはその前身のいずれかでサポートされているすべての機能を保持しようとします。したがって、NumPyには、SciPyに適切に属していても、いくつかの線形代数関数が含まれています。いずれにせよ、SciPyには、線形代数モジュールのより完全な機能を備えたバージョンと、他の多くの数値アルゴリズムが含まれています。Pythonで科学計算を行っている場合は、おそらくNumPyとSciPyの両方をインストールする必要があります。>ほとんどの新機能は、NumPyではなくSciPyに属しています。

そうです、重複は下位互換性のためです。一般的に、それらは同じ結果をもたらします。ただし、FAQに記載されているように、新機能は通常SciPyに実装されていますが、必ずしもNumPyである必要はありません。これにはバグ修正が含まれます。たとえば、numpy.linalg.eigが複雑な行列に対して誤った固有値を返したのに対し、scipy.linalg.eigは正しい固有値を返したことがわかりました。

一般的に、私はFAQの「理想的な世界」のシナリオに固執することを好みます。基本的な配列操作にはNumPyを使用し、すべての線形代数にはSciPyを使用します。このようにして、私は驚きに遭遇しません。

于 2012-05-26T15:46:26.707 に答える