当前位置: 首页 > 面试题库 >

SciPy和NumPy之间的关系

时同
2023-03-14
问题内容

SciPy似乎在其自己的名称空间中提供了NumPy的大多数(但不是全部[1])功能。换句话说,如果有一个名为的函数numpy.foo,几乎可以肯定有一个scipy.foo。在大多数情况下,两者看起来是完全相同的,甚至有时指向相同的功能对象

有时,它们是不同的。举一个最近出现的例子:

  • numpy.log10是一个ufunc该返回的NaN为负参数;
  • scipy.log10 返回负参数的复杂值,并且似乎不是ufunc。

同样可以说,大约loglog2logn,但不是关于log1p[2]。

另一方面,对于相同的ufunc
numpy.exp,它们scipy.exp似乎是不同的名称。scipy.log1p和的情况也是如此numpy.log1p

另一个例子是numpy.linalg.solveVS scipy.linalg.solve。它们相似,但是后者比前者提供了一些附加功能。

为什么出现明显的重复?如果这意味着要的批发进口numpyscipy命名空间,为什么在行为的细微差别和缺少的功能?是否有一些有助于消除混乱的总体逻辑?

[1] ,,和其他几个人都在没有同行的命名空间。numpy.min``numpy.max``numpy.abs``scipy

[2]使用NumPy 1.5.1和SciPy 0.9.0rc2进行了测试。


问题答案:

上次我检查它时,scipy__init__方法执行

from numpy import *

以便在导入scipy模块时将整个numpy命名空间包含到scipy中。

log10您描述的行为很有趣,因为 两个 版本都来自numpy。一个是a
ufunc,另一个是numpy.lib功能。为什么scipy偏爱库函数而不是ufunc,我不知道该怎么办。

编辑:事实上,我可以回答这个log10问题。在scipy__init__方法中,我看到以下内容:

# Import numpy symbols to scipy name space
import numpy as _num
from numpy import oldnumeric
from numpy import *
from numpy.random import rand, randn
from numpy.fft import fft, ifft
from numpy.lib.scimath import *

log10您获得scipy的功能来自numpy.lib.scimath。查看该代码,它说:

"""
Wrapper functions to more user-friendly calling of certain math functions
whose output data-type is different than the input data-type in certain
domains of the input.

For example, for functions like log() with branch cuts, the versions in this
module provide the mathematically valid answers in the complex plane:

>>> import math
>>> from numpy.lib import scimath
>>> scimath.log(-math.exp(1)) == (1+1j*math.pi)
True

Similarly, sqrt(), other base logarithms, power() and trig functions are
correctly handled.  See their respective docstrings for specific examples.
"""

看来模块覆盖了基础numpy的ufuncs
sqrtloglog2lognlog10powerarccosarcsin,和arctanh。这就解释了您所看到的行为。这样做的根本设计原因可能埋在某个地方的邮件列表中。



 类似资料:
  • Numpy、scipy、matplotlib和pylab是使用python进行科学计算的人常用的术语。 我刚刚了解了一点派拉布,我感到困惑。每当我想导入numpy时,我都可以: 我只是想,一旦我做到了 numpy也将被导入(使用alias)。所以基本上第二个比第一个做得更多。 有几件事我想问: pylab只是numpy、scipy和matplotlib的包装器,对吗 由于np是pylab中的num

  • 我怎样才能导入阶乘函数分别从Numpy和sippy为了看看哪一个更快? 我已经通过导入数学从python本身导入了阶乘。但是,它不适用于Numpy和smpy。

  • 我试图在我正在分发的包中创建所需的库。它需要SciPy和NumPy库。在开发过程中,我使用 它安装了SciPy 0.9。0和NumPy 1.5。1,而且效果很好。 我想使用-执行同样的操作,以便能够在设置中指定依赖项。我自己的包裹。 问题是,当我尝试时: 它很好用。 但是 惨败 我如何让它工作?

  • 问题内容: 我正在尝试在要分发的程序包中创建所需的库。它需要SciPy和NumPy库。在开发过程中,我同时使用 它安装了SciPy 0.9.0和NumPy 1.5.1,并且运行良好。 我想使用-做同样的事情,以便能够在我自己的包的setup.py中指定依赖项。 问题是,当我尝试: 它工作正常。 但是之后 惨败 我该如何工作? 问题答案: 我假设我的回答是Linux经验。我发现要顺利进行有三个先决条

  • 译者:cangyunye 作者: Adam Paszke 修订者: Adam Dziedzic 在这个教程里,我们要完成两个任务: 创建一个无参神经网络层。 这里需要调用numpy作为实现的一部分。 创建一个权重自主优化的伸进网络层。 这里需要调用Scipy作为实现的一部分。 import torch from torch.autograd import Function 无参数示例 这一层并

  • 问题内容: 内置和之间有什么区别? 例 输出: 我发现这里说的是: float32单精度浮点数:符号位,8位指数,23位尾数 找不到内置格式。 问题答案: Python的标准类型是C :http : //docs.python.org/2/library/stdtypes.html#typesnumeric NumPy的标准相同,并且也相同。