Храните производные единицы без префикса, избегая при этом единицы в базе.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Храните производные единицы без префикса, избегая при этом единицы в базе.

Сообщение Anonymous »

Я новичок в Pint. Я имею дело с производными единицами, такими как Сименс, Джоуль, Фарад и т. д.
В частности, я хотел бы хранить созданные величины в их единицах без какого-либо префикса, без преобразования в базовые единицы. Например, 1 миллисименс (мСм) следует хранить как 0,001 С.
Попробуем объяснить это на примере. Следующий фрагмент кода:

Код: Выделить всё

import pint

ureg = pint.UnitRegistry(system="mks")
quantity = ureg.Quantity(1,  ureg.Unit("mm"))   # Define quantity of 1 millimiter
stored_quantity = quantity.to_base_units()
print(stored_quantity)                          # print: 0.001 meter OK
В этом случае я получаю желаемый эффект: количество сохраняется в метрах.
Но когда я пытаюсь использовать производные количества, Pint преобразует их в базовые единицы, или ( используя другой метод to_xxx), он сохраняет полученное количество, а также префикс. Давайте посмотрим на примере:

Код: Выделить всё

quantity = ureg.Quantity(1,  ureg.Unit("mJ"))
print(quantity)                                  # 1 millijoule
print(quantity.to_root_units())                  # 1.0 gram * meter ** 2 / second ** 2
print(quantity.to_base_units())                  # 0.001 kilogram * meter ** 2 / second ** 2
print(quantity.to_reduced_units())               # 1 millijoule -> Preserves derived unit but also  "milli"
print(quantity.to_compact())                     # 1 millijoule -> Preserves derived unit but also  "milli"
Желаемый выходной сигнал должен составлять 0,001 Дж.
Конечно, можно явно вызвать:

Код: Выделить всё

stored_quantity = quantity.to(ureg.joule)
,
но я не смог найти способ получить информацию о ureg.joule программно.
Другой можно было бы вызвать метод to_preferred(), добавив список предпочтительных единиц измерения в ureg:

Код: Выделить всё

ureg.default_preferred_units = [ureg.siemens, ...]

print(quantity.to_preferred()) # gives 0.001J
но метод to_preferred требует пакета mip, поскольку он решает задачу оптимизации определения правильной производной единицы (в том смысле, что которые минимизируют определенную функцию стоимости).
Это приводит к тому, что метод работает очень медленно (порядка секунд для идеи).
Есть ли способ достичь этой цели ?

Подробнее здесь: https://stackoverflow.com/questions/790 ... it-to-base
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»