代码之家  ›  专栏  ›  技术社区  ›  Eric O. Lebigot

在包含对象的NumPy数组上定义数学运算(sin)

  •  1
  • Eric O. Lebigot  · 技术社区  · 16 年前

    我想为模块(模块)创建的数字类对象提供“所有”数学函数 uncertainties.py 模块,通过错误传播执行计算)这些对象是具有不确定性的数字。

    目前,我从 math 在模块中 不确定性 from math import * import uncertainties

    但是,与NumPy的交互仅限于基本操作(可以添加一组具有不确定性的数字,等等);它(还)不包括更复杂的函数(例如sin()),这些函数将用于包含不确定性数字的NumPy数组。到目前为止,我采取的方法是建议用户定义 sin = numpy.vectorize(math.sin) ,使新的 math.sin 函数(作用于具有不确定性的数字)被广播到任何Numpy数组的元素。一个缺点是,用户必须对每个感兴趣的功能执行此操作,这很麻烦。

    那么,什么是扩展数学函数的最佳方法,例如 sin() 这样他们就可以方便地使用简单的数字和NumPy数组了?

    numpy.sin 数学·辛 不确定性 模块,并停止重新定义 数学·辛 ?

    sin 所以它既适用于简单数,也适用于不确定数和Numpy数组?我的新定义 数学·辛 numpy.vectorize 在“常规”NumPy阵列上可能比 努比·辛 .

    1 回复  |  直到 16 年前
        1
  •  0
  •   Eric O. Lebigot    16 年前

    它看起来像是遵循NumPy本身所做的让事情保持干净:“扩展的”数学运算(sin)可以放在一个单独的名称空间中。因此,NumPy拥有 numpy.sin 等。这些操作大多与来自 math ,但也可以在NumPy阵列上工作。

    因此,在我看来,数学函数应该适用于通常的数字 NumPy阵列 具有不确定性的对应项最好在单独的名称空间中定义。例如,用户可以执行以下操作:

    from uncertainties import sin
    

    from uncertainties import *  # sin, cos, etc.
    

    from uncertainties.math_ops import *  # Work on scalars and scalars with uncertainty
    

    from uncertainties.numpy_ops import *  # Work on everything (scalars, arrays, numbers with uncertainties, arrays with uncertainties)