我想为模块创建的类似数字的对象提供“所有”数学函数(该uncertainties.py
模块执行错误传播的计算)——这些对象是具有不确定性的数字。
做这个的最好方式是什么?
math
目前,我重新定义了模块中的大部分函数uncertainties.py
,以便它们处理不确定的数字。一个缺点是用户想做from math import *
必须做完之后再做import uncertainties
。
然而,与 NumPy 的交互仅限于基本操作(可以添加具有不确定性的数字数组等);它(还)不包括更复杂的函数(例如 sin()),这些函数可以在包含不确定数字的 NumPy 数组上工作。到目前为止,我采取的方法包括建议用户定义sin = numpy.vectorize(math.sin)
,以便将新math.sin
函数(适用于具有不确定性的数字)广播到任何 Numpy 数组的元素。一个缺点是这必须为用户感兴趣的每个功能完成,这很麻烦。
那么,扩展数学函数的最佳方法是什么,sin()
以便它们可以方便地处理简单的数字和 NumPy 数组?
NumPy 选择的方法是定义自己的numpy.sin
,而不是修改math.sin
它以使其与 Numpy 数组一起使用。我应该为我的uncertainties.py
模块做同样的事情,并停止重新定义math.sin
吗?
此外,什么是最有效和最正确的定义方法,sin
以便它适用于简单数字、具有不确定性的数字和 Numpy 数组?我的重新定义math.sin
已经处理了简单的数字和不确定的数字。但是,在“常规” NumPy 数组上对其进行矢量化numpy.vectorize
可能比numpy.sin
.