12

注意:重複をチェックしましたが、質問に明確に答えるものはありません。私が何かを逃した場合はあなたが私に知らせてくれると信じています!

コードをクリーンアップするために、プログラムにSciPyとNumPyをインポートするための標準的な規則を探していました。厳密なガイドラインがないことはわかっており、思い通りにそれを行うことができますが、それでも時々矛盾す​​る指示を見つけます。

たとえば、NumPyは配列オブジェクトのみを実装することを意図しているのに対し、SciPyは他のすべての科学的アルゴリズムのために存在することをどこかで読みました。したがって、NumPyは配列操作に使用し、SciPyはその他すべてに使用する必要があります...一方、SciPyはメインの名前空間にすべてのNumpy関数をインポートします。これは(この質問を参照scipy.array())と同じであるため、NumPyのみを使用する必要があります。 SciPyが重複しているため、使用されていない場合...numpy.array()

SciPyとNumPyを使用するための推奨される方法は何ですか?科学者でsqrt(-1)あるため、複素数を返す必要があるため、SciPyのみを使用する傾向があります。

今のところ、私のコードは次のように始まります。

import numpy as np
from scipy import *
from matplotlib import pyplot as plt

数学演算(など)にはscipyを使用しlog10()、配列の作成/演算(など)にはnumpyを使用しnp.zeros()ます。SciPyを最後まで使い、NumPyを明示的にインポートしないのは問題ありませんか?将来のアップデートでは、SciPyからNumPyの配列操作が削除されますか?

4

3 に答える 3

6

次のようなことをお勧めします

import numpy as np
import scipy as sp

代わりは。特にやfrom ... import *などの大きなモジュールで行うのは常に危険です。以下にその理由を示します。numpyscipy

>>> any(['foo'])
True
>>> from scipy import *
>>> any(['foo'])

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
     any(['foo'])
  File "C:\Python27\lib\site-packages\numpy\core\fromnumeric.py", line 1575, in any
    return _wrapit(a, 'any', axis, out)
  File "C:\Python27\lib\site-packages\numpy\core\fromnumeric.py", line 37, in _wrapit
    result = getattr(asarray(obj),method)(*args, **kwds)
TypeError: cannot perform reduce with flexible type

そこで何が起こるの?標準の python 組み込み関数は、動作が異なるanyに置き換えられます。scipy.anyこれにより、標準を使用するコードが壊れる可能性がありますany

于 2013-03-20T17:15:42.330 に答える
1

この投稿には、2 つのモジュールに関する良い情報があります ( scipy と numpy の関係)。Numpy の機能は、Scipy に完全に含まれるように設計されているようですが、いくつかの例外があります (投稿を参照)。数学関数、配列、その他の最も重要なものは Scipy に含まれているため、すべてのニーズに対して単純に Scipy を使用しても安全だと思います。

于 2013-06-18T01:26:35.940 に答える
0

クラスを作成して、必要なものだけを使用するのはどうですか、 fx: class one:

import cv2
from SIGBWindows import SIGBWindows
from SIGBAssg import *

クラス 2:

import cv2
import numpy as np

from pylab import *
from scipy.cluster.vq import *
from scipy.misc import imresize

クラス 3:

import cv2
import numpy as np

最後に、オブジェクトを呼び出します。

import cv2
from SIGBWindows import SIGBWindows
from SIGBAssg import *

windows = SIGBWindows(mode="video")
windows.openVideo("somevideo.avi")
kmeans(windows)

それがあなたが探しているものかどうかはわかりませんが、このアプローチにより、コードが非常にきれいになり、機能を簡単に追加できます。

于 2013-03-20T16:27:26.037 に答える