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 *尤其是对于大型模块,例如numpy和 ,这样做总是很危险的scipy。以下说明了原因:

>>> 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

这篇文章有一些关于这两个模块的好信息(scipy 和 numpy 之间的关系)。Numpy 的功能似乎完全包含在 Scipy 中,尽管有一些例外(见帖子)。我想说简单地使用 Scipy 来满足您的所有需求是安全的,因为最重要的东西,如数学函数、数组和其他东西都包含在 Scipy 中。

于 2013-06-18T01:26:35.940 回答
0

如何制作课程并使用您需要的东西,fx:第一类:

import cv2
from SIGBWindows import SIGBWindows
from SIGBAssg import *

第二类:

import cv2
import numpy as np

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

第三类:

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 回答