Je travaille sur un projet qui permet aux utilisateurs de suivre différents types de données au fil du temps. Une partie de l'idée de base est qu'un utilisateur devrait pouvoir saisir des données en utilisant toutes les unités dont il a besoin. J'ai regardé les deux unités:
http://pypi.python.org/pypi/units/
et quantités:
http://pypi.python.org/pypi/quantities/
Cependant, je ne suis pas sûr de la meilleure façon de procéder. D'après ce que je peux dire, les quantités sont plus complexes, mais comprennent une meilleure liste initiale d'unités.
J'applaudis l'utilisation d'unités explicites dans les applications de calcul scientifique. L'utilisation d'unités explicites équivaut à se brosser les dents. Il ajoute un peu d'ennui à l'avant, mais la sécurité de type que vous obtenez peut économiser beaucoup d'ennuis à long terme. Comme, disons, sans écraser 125 millions de dollars sur des planètes .
Vous devriez aussi probablement vérifier ces deux autres packages python unités/quantités:
Scientific.Physics.PhysicalQuantity
J'ai une fois enquêté sur Scientific.Physics.PhysicalQuantity. Il ne répondait pas tout à fait à mes besoins, mais pourrait satisfaire les vôtres. Il est difficile de dire de quelles fonctionnalités vous avez besoin dans votre brève description.
J'ai fini par écrire mon propre package python pour la conversion d'unités et l'analyse dimensionnelle, mais il n'est pas encore correctement conditionné pour la sortie. Nous utilisons mon système d'unité dans les liaisons python pour notre système OpenMM pour la mécanique moléculaire accélérée par GPU. Vous pouvez parcourir le référentiel svn de mon code python unités sur:
Finalement, j'ai l'intention de l'empaqueter pour la distribution. Si vous le trouvez intéressant, faites-le moi savoir. Cela pourrait me motiver à l’emballer plus tôt. Les fonctionnalités que je recherchais lors de la conception du système d'unités SimTK python étaient les suivantes:
Quelles fonctionnalités sont importantes pour vous?
Pint est récemment venu sur le terrain. Quelqu'un veut-il partager ses expériences? Cela semble bon. FYI: Il ressemble à Pint sera intégré avec Incertitudes dans un proche avenir.
Notez que quantities
a un très mauvais support pour la température:
>>> (100 * pq.degC).rescale(pq.degF)
array(179.99999999999997) * degF
>>> (0 * pq.degC).rescale(pq.degF)
array(0.0) * degF
0 degré Celsius n'est pas 0 degré Fahrenheit. Leur cadre ne prend en charge aucun type de conversion qui ne se contente pas de multiplier par un facteur.
Il existe un autre package appelé nyt du projet yt. Les auteurs de unyt reconnaissent l'existence de Pint et d'astropy.units. Les conversions de et vers ces autres packages sont prises en charge.
Le point de vente de unyt est vitesse. C'est plus rapide que les deux autres. Les packages d'unités sont comparés dans plusieurs références dans ce papier .
Les repères sont décevants pour tous ceux qui sont obsédés par la performance. :-( Le ralentissement des calculs avec l'un de ces systèmes d'unités est important. Le facteur de ralentissement est 6-10 pour les tableaux à 1000 entrées (pire pour les plus petits tableaux).
Avertissement: je ne suis pas affilié à unyt, je veux juste partager ce que j'ai appris sur les systèmes d'unités.
Il semble qu'un autre package soit également sorti pour cela, écrit par Massimo DiPierro de la renommée web2py, appelé Buckingham .
A noter également, Brian a quelque chose comme ça depuis un certain temps.
Je suis surpris que personne n'ait encore mentionné SymPy. SymPy est une bibliothèque de mathématiques symboliques mature et bien entretenue pour Python qui est en outre un projet parrainé par NumFOCUS ).
Il a un module Physique avec de nombreuses classes et fonctions utiles pour "résoudre des problèmes en physique". Le plus pertinent pour vous, il a un sous-module nit qui contient tout ce dont vous avez besoin, je pense; il suffit de lire l'excellente documentation.
Je pense que vous devriez utiliser des quantités, car une quantité a des unités qui lui sont associées.
La pression, par exemple, sera une quantité qui pourrait être entrée et convertie dans et en différentes unités (Pa, psi, atm, etc.). Vous pourriez probablement créer de nouvelles quantités spécifiques à votre application.