我想提供“所有”用于通过模块创建的相同数目的对象的数学函数(的uncertainties.py
模块,其与错误传播进行计算) - 这些对象是具有不确定性的数字。定义对象
这样做的最好方法是什么?
目前,我重新定义了模块uncertainties.py
中的math
的大部分功能,以便它们处理具有不确定性的数字。一个缺点是,想要做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.vectorize
对其进行向量化可能会比numpy.sin
在“常规”NumPy阵列上慢得多。