SciPy似乎在它自己的命名空间中提供了NumPy的大部分(但不是所有[1])函数。换句话说,如果有一个名为numpy.foo
的函数,几乎肯定会有一个scipy.foo
。大多数情况下,两者看起来完全相同,甚至经常指向相同的函数对象。
有时候,它们是不同的。举一个最近出现的例子:
numpy.log10
是一个返回负参数nan的ufunc;scipy.log10
返回负参数的复杂值,并且似乎不是一个ufunc。对于log
, log2
和logn
也是如此,但对于log1p
[2]则不然。
另一方面,numpy.exp
和scipy.exp
似乎是同一个ufunc的不同名称。scipy.log1p
和numpy.log1p
也是如此。
另一个例子是numpy.linalg.solve
vs scipy.linalg.solve
。它们很相似,但后者比前者提供了一些额外的功能。
为什么会出现明显的重复?如果这意味着将numpy
大量导入到scipy
命名空间,为什么行为上有细微的差异和缺少函数?是否有一些总体逻辑可以帮助理清混乱?
[1] numpy.min
, numpy.max
, numpy.abs
和其他一些在scipy
命名空间中没有对应的对象。
[2]使用NumPy 1.5.1和SciPy 0.9.0rc2测试。