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测试。