uncertainties.py
モジュール(エラー伝播を伴う計算を実行するモジュール)によって作成された数のようなオブジェクトに「すべての」数学関数を提供したいと思います。これらのオブジェクトは不確定性のある数です。
これを行うための最良の方法は何ですか?
math
現在、モジュール内のほとんどの関数を再定義しuncertainties.py
て、不確実な数値で機能するようにしています。欠点の1つは、実行したいユーザーは実行後from math import *
に実行する必要があることです。import uncertainties
ただし、NumPyとの相互作用は、基本的な操作に制限されています(不確実性のある数値の配列を追加するなど)。不確実性のある数値を含むNumPy配列で機能する、より複雑な関数(sin()など)は(まだ)含まれていません。私がこれまでに採用したアプローチは、ユーザー定義を提案することで構成されていますsin = numpy.vectorize(math.sin)
。これにより、新しいmath.sin
関数(不確実性のある数値で機能する)が任意のNumpy配列の要素にブロードキャストされます。欠点の1つは、これをユーザーが関心のある機能ごとに実行する必要があることです。これは面倒です。
sin()
では、単純な数値やNumPy配列で便利に機能するように、数学関数を拡張するための最良の方法は何でしょうか。
NumPyが選択したアプローチは、Numpy配列で機能するようにnumpy.sin
変更するのではなく、独自のを定義することです。モジュールmath.sin
に対して同じことを行い、再定義を停止する必要がありますか?uncertainties.py
math.sin
sin
さらに、単純な数値、不確実性のある数値、およびNumpy配列の両方で機能するように、最も効率的で正しい定義方法は何でしょうか。私の再定義math.sin
は、単純な数と不確実な数をすでに処理しています。ただし、を使用してベクトル化することnumpy.vectorize
は、「通常の」NumPy配列では。よりもはるかに遅い可能性がありますnumpy.sin
。