Phi*_*Kay 11 python numpy scipy python-import
注意:我检查了重复,没有明确回答我的问题.如果我错过了什么,我相信你会告诉我的!
为了清理我的代码,我一直在寻找在我的程序中导入SciPy和NumPy的标准约定.我知道没有严格的准则,我可以按照我想要的方式去做,但有时候,我仍然会发现矛盾的指示.
例如,我在某处读过NumPy只是为了实现数组对象,而SciPy则用于其他所有科学算法.所以NumPy应该用于数组操作而SciPy用于其他所有东西......另一方面,SciPy在其主命名空间中导入每个Numpy函数,这scipy.array()与numpy.array()(看这个问题)相同,所以NumPy只能用于当没有使用SciPy时,因为它们是重复的......
使用SciPy和NumPy的推荐方法是什么?作为一名科学家,sqrt(-1)应该返回一个复杂的数字,所以我倾向于只使用SciPy.
现在,我的代码开头是:
import numpy as np
from scipy import *
from matplotlib import pyplot as plt
Run Code Online (Sandbox Code Playgroud)
我使用scipy进行数学运算(例如log10())和numpy进行数组创建/运算(例如np.zeros()).用SciPy一路走下去并且永远不会明确导入NumPy会不会很好?未来的更新会从SciPy中删除NumPy的数组操作吗?
我推荐做类似的事情
import numpy as np
import scipy as sp
Run Code Online (Sandbox Code Playgroud)
代替.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
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?标准的python内置函数any被替换为scipy.any具有不同行为的函数.这可能会破坏使用该标准的任何代码any.