Conversion d'unités en Python
SymPy est un excellent outil pour faire des conversions d'unités en Python:
>>> from sympy.physics import units
>>> 12. * units.inch / units.m
0.304800000000000
Vous pouvez facilement rouler vos propres:
>>> units.BTU = 1055.05585 * units.J
>>> units.BTU
1055.05585*m**2*kg/s**2
Cependant, je ne peut pas mettre en œuvre ce dans mon application, sauf si je peux convertir des degrés C (absolue) à K degrés F à degrés R, ou toute autre combinaison de ceux-ci.
J'ai pensé que peut-être quelque chose de ce genre:
units.degC = <<somefunc of units.K>>
Mais clairement c'est le mauvais chemin pour aller vers le bas. Des suggestions pour la mise en œuvre proprement "offset"-type des conversions d'unités dans SymPy?
Note: je suis ouvert à d'autres unités de conversion les modules, mais ne sais pas du tout d'ailleurs Unumet l'a trouvé à être lourd.
Edit: OK, il est maintenant clair que ce que je veux faire, c'est d'abord déterminer si les deux quantités à comparer sont dans le même système de coordonnées. (comme les unités de temps de référence à différentes époques ou les fuseaux horaires ou dB à droite de l'amplitude), faire de la transformation appropriée, puis de faire la conversion. Il n'existe aucun général de coordonner les outils de gestion du système? Ce serait formidable.
Je voudrais faire l'hypothèse que l' °F et °C reportez-vous toujours à Δ°F Δ°C à l'intérieur d'une expression, mais se référer à l'absolu quand on est seul. Je me demandais juste si il y avait moyen de faire units.degF
une fonction et claque un décorateur property()
de traiter ces deux conditions.
Mais pour l'instant, je vais mettre en units.C == units.K
et d'essayer de rendre très clair dans la documentation pour utiliser les fonctions convertCtoK(...)
et convertFtoR(...)
lorsque vous traitez avec des unités absolues. (C'est juste une blague. Non, je ne le ferai pas.)
source d'informationauteur Paul
Vous devez vous connecter pour publier un commentaire.
Personnellement, j'aime Les quantités grâce à son NumPy intégration, cependant elle seulement relative, température, pas absolue.
L'Unum documentation a un très bon article sur pourquoi c'est dur:
Il est assez facile à conceptuellement voir les problèmes avec le fait d'essayer de représenter absolue de conversion de la température symboliquement. Avec une unité relative,
(x unit) * 2 == (x * 2) unit
—unité de mathématiques est commutatif. Avec la température absolue, qui se décompose—il est difficile de faire quelque chose de plus complexe que le droit de la température de conversions n'ayant pas d'autres dimensions de l'unité. Vous êtes probablement mieux de garder tous les calculs en Kelvin et de la conversion vers et à partir d'autres unités de température uniquement à l'entrée et à la sortie de votre code.Exemple, comment cela pourrait fonctionner:
La natu package gère les unités de température. Par exemple, vous pouvez faire ceci:
Préfixes sont pris en charge:
natu gère également non linéaire des unités telles que la décibelset pas seulement ceux avec des décalages comme degré Celsius et degré Fahrenheit.
Concernant le premier exemple que vous avez donné, vous pouvez le faire:
BTU est déjà intégrée. Vous pouvez modifier l'unité d'affichage à m**2*kg/s**2, mais par défaut natu simplifie l'unité de J: