私は、ユーザーが時間の経過とともにさまざまなデータタイプを追跡できるプロジェクトに取り組んでいます。基本的な考え方の一部は、ユーザーが必要なユニットを使用してデータを入力できるようにすることです。私は両方のユニットを見てきました:
http://pypi.python.org/pypi/units/
および数量:
http://pypi.python.org/pypi/quantities/
しかし、最善の方法はわかりません。私が知ることができることから、量はより複雑ですが、単位のより良い初期リストが含まれています。
科学計算アプリケーションでの明示的なユニットの使用を称賛します。明示的な単位の使用は、歯を磨くのに似ています。前もって面倒な作業を追加しますが、タイプセーフティを取得することで、長い目で見れば多くの手間を省くことができます。たとえば、 1億2500万ドルのオービターを惑星に衝突させない 。
また、これらの2つのpython unit/quantityパッケージをチェックアウトする必要があります。
Scientific.Physics.PhysicalQuantity
私はかつてScientific.Physics.PhysicalQuantityを調査しました。それは私のニーズを完全には満たしていませんでしたが、あなたを満足させるかもしれません。必要な機能を簡単な説明から伝えるのは難しいです。
最終的に、ユニット変換と次元分析用に独自のpythonパッケージを作成しましたが、まだリリース用に適切にパッケージ化されていません。 GPU加速分子力学用のOpenMMシステムのpythonバインディングでユニットシステムを使用しています。私のpythonユニットコードのsvnリポジトリを参照できます:
最終的には、配布用にパッケージ化する予定です。あなたがそれを面白いと思うならば、私に知らせてください。それは私がもっと早くそれをパッケージ化する動機になるかもしれません。 SimTK pythonユニットシステムを設計していたときに探していた機能には、次のものがありました。
あなたにとって重要な機能は何ですか?
Pint が最近フィールドに登場しました。誰もが自分の経験を共有したいですか?いいね。参考までに: ピントは不確実性と統合されます 近い将来に見えます。
quantities
は温度のサポートが非常に悪いことに注意してください。
>>> (100 * pq.degC).rescale(pq.degF)
array(179.99999999999997) * degF
>>> (0 * pq.degC).rescale(pq.degF)
array(0.0) * degF
摂氏0度は華氏0度ではありません。それらのフレームワークは、係数を掛けるだけではない、いかなる種類の変換もサポートしていません。
Yt-projectには nyt という別のパッケージがあります。 unytの著者は、Pintおよびastropy.unitsの存在を認めています。これらの他のパッケージとの間の変換がサポートされています。
Unytのセールスポイントはspeedです。他の2つよりも高速です。ユニットパッケージは、この paper のいくつかのベンチマークで比較されます。
ベンチマークは、パフォーマンスに夢中な人にとっては残念です。 :-(これらの単位システムのいずれかを使用した計算のスローダウンは大きい。スローダウン係数は、1000エントリの配列の場合は6-10(より小さい場合は悪い)配列)。
免責事項:私はunytと提携していません。ユニットシステムについて学んだことを共有したいだけです。
Buckingham と呼ばれるweb2py名声のMassimo DiPierroによって書かれた、これを行うための別のパッケージも出てきたようです。
また、注目すべきは、 Brian がしばらくの間このようなものを持っていたことです。
誰もまだSymPyに言及していないことに驚いています。 SymPy は、Pythonそれはさらに NumFOCUS-sponsored プロジェクトであるための、十分に管理された成熟した記号数学ライブラリです。
「物理学の問題を解決する」ための多くの便利なクラスと機能を備えた Physics モジュールがあります。最も関連性の高いもので、必要なものがすべて含まれる nit サブモジュールがあります。優れたドキュメントを読んでください。
数量にはいくつかの単位が関連付けられているため、数量を使用する必要があると思います。
たとえば、圧力は、さまざまな単位(Pa、psi、atmなど)で入力および変換できる数量です。おそらく、アプリケーションの新しい数量仕様を作成できます。