Подтвердить что ты не робот

Преобразование единиц в Python

Я работаю над проектом, который позволяет пользователям отслеживать разные типы данных с течением времени. Основная идея заключается в том, что пользователь должен иметь возможность вводить данные с помощью любых единиц, которые им нужны. Я смотрел на оба устройства:

http://pypi.python.org/pypi/units/

и количества:

http://pypi.python.org/pypi/quantities/

Однако я не уверен, как лучше всего идти. Из того, что я могу сказать, количество более сложное, но включает в себя лучший исходный список единиц.

4b9b3361

Ответ 1

Я приветствую использование явных единиц в научных вычислительных приложениях. Использование явных единиц аналогично чистке зубов. Это добавляет немного скуки, но безопасность типа, которую вы получаете, может сэкономить массу неприятностей в долгосрочной перспективе. Например, не сбивает $125 миллионов орбиталей на планеты.

Вероятно, вы также можете проверить эти два других пакета/количества пакетов python:

Unum

Scientific.Physics.PhysicalQuantity

Я когда-то исследовал Scientific.Physics.PhysicalQuantity. Это не совсем отвечало моим потребностям, но могло удовлетворить ваши. Трудно сказать, какие функции вам нужны из вашего краткого описания.

Я закончил тем, что написал свой собственный пакет python для преобразования единиц измерения и анализа размеров, но он пока еще не упакован для выпуска. Мы используем мою единую систему в привязках python для нашей системы OpenMM для ускоренной молекулярной механики с графическим процессором. Вы можете просмотреть репозиторий svn моего кода элементов python по адресу:

блоки python SimTK

В конце концов я собираюсь упаковать его для распространения. Если вы считаете это интересным, пожалуйста, дайте мне знать. Это может побудить меня упаковать его раньше. Функции, которые я искал, когда я разрабатывал систему питонов SimTK, включали следующее:

  • Единицы НЕ обязательно хранятся в единицах СИ внутри. Это очень важно для меня, потому что одна важная область применения для нас - в молекулярном масштабе. Использование внутренних блоков СИ может привести к переполнению экспоненты в широко используемых расчетах молекулярной силы. Внутри, все единичные системы одинаково важны в SimTK.
  • Мне нужна была аналогичная мощность и гибкость для системы Boost.Units на С++. И потому, что я знаком с этой системой, и потому, что она была разработана под пристальным наблюдением большой группы блестящих инженеров. Boost.Units - это хорошо продуманная система анализа второго поколения. Таким образом, я могу утверждать, что система единиц SimTK представляет собой систему третьего поколения:). Имейте в виду, что, хотя Boost.Units - это "нулевая служебная" система без затрат времени исполнения, все реализации количества питонов, включая блоки SimTK, вероятно, требуют затрат времени исполнения.
  • Я хочу, чтобы размерные количества, совместимые с массивами numpy, но необязательно требуют пакет python numpy. Другими словами, количество может быть основано либо на массивах numpy, либо на встроенных типах python.

Какие функции важны для вас?

Ответ 3

Обратите внимание, что quantities имеет очень плохую поддержку температуры:

>>> (100 * pq.degC).rescale(pq.degF)
array(179.99999999999997) * degF
>>> (0 * pq.degC).rescale(pq.degF)
array(0.0) * degF

0 градусов Цельсия не 0 градусов по Фаренгейту. Их рамки не поддерживают никакого преобразования, которое не просто умножается на фактор.

Ответ 4

Похоже, что для этого также появился еще один пакет, написанный Массимо ДиПьерро из славы web2py, называемый Buckingham.

Также обратите внимание, что Brian уже некоторое время было что-то вроде этого.

Ответ 5

Вы можете посмотреть новый пакет под названием natu. В нем рассматриваются три вопроса, которые перечислены @ChristopherBruns. Он доступен в PyPI.

Я автор этого пакета, и я был бы признателен за любые комментарии или предложения.

Ответ 6

Я думаю, вы должны использовать количества, потому что количество имеет некоторые единицы, связанные с ним.

Давление, например, будет величиной, которую можно было бы ввести и преобразовать в разные единицы (Pa, psi, atm и т.д.). Вероятно, вы могли бы создать новые спецификации количества для своего приложения.

Ответ 7

Я удивлен, что никто еще не упомянул SymPy. SymPy - это зрелая и хорошо сохранившаяся библиотека символической математики для Python, которая, кроме того, проект, спонсируемый NumFOCUS.

Он имеет Physics модуль со многими полезными классами и функциями для "решения проблем в физике". Наиболее релевантный для вас, он имеет Unit подмодуль, который содержит все, что вам нужно, я думаю; просто прочитайте отличную документацию.