문제

심파이 Python에서 단위 변환을 수행하는 데 유용한 도구입니다.

>>> from sympy.physics import units
>>> 12. * units.inch / units.m
0.304800000000000

당신은 쉽게 자신의 롤을 할 수 있습니다:

>>> units.BTU = 1055.05585 * units.J
>>> units.BTU
1055.05585*m**2*kg/s**2

그러나 C(절대)를 K, F, R 또는 그 조합으로 변환할 수 없으면 애플리케이션에 이를 구현할 수 없습니다.

나는 아마도 다음과 같은 것이 효과가 있을 것이라고 생각했습니다.

units.degC = <<somefunc of units.K>>

그러나 그것은 분명히 잘못된 길로 내려가는 것입니다.SymPy에서 "오프셋" 유형 단위 변환을 깔끔하게 구현하기 위한 제안 사항이 있습니까?

메모:다른 단위 변환 모듈을 사용해 보고 싶지만 그 외에는 아무것도 모릅니다. 우눔, 그리고 그것이 번거롭다는 것을 알았습니다.

편집하다:좋아요, 이제 제가 하고 싶은 일은 비교할 두 양이 동일한 좌표계에 있는지 먼저 결정하는 것임이 분명해졌습니다.(다른 시대 또는 시간대에 대한 시간 단위 참조 또는 직선 진폭에 대한 dB와 같은) 적절한 변환을 수행한 다음 변환을 수행합니다.일반적인 좌표계 관리 도구가 있나요?그거 좋을 것 같아요.

°F와 °C는 표현식 내에서는 항상 Δ°F Δ°C를 나타내지만 단독으로 사용할 때는 절대값을 나타낸다고 가정하겠습니다.그냥 만들 수 있는 방법이 없을까 궁금했는데 units.degF 함수를 사용하고 데코레이터를 때립니다. property() 이 두 가지 조건을 처리하는 방법에 대해 알아보겠습니다.

하지만 지금은 설정하겠습니다. units.C == units.K 함수를 사용하는 방법을 문서에서 매우 명확하게 설명하도록 노력하세요. convertCtoK(...) 그리고 convertFtoR(...) 절대 단위를 다룰 때.(농담이에요.아니요, 안 할 거예요.)

도움이 되었습니까?

해결책

나는 개인적으로 좋아합니다 수량 감사합니다 Numpy 그러나 통합은 절대적인 것이 아니라 상대 온도 만 수행합니다.

다른 팁

Unum 문서에는 이것이 왜 어려운지에 대한 꽤 좋은 글이 있습니다:

Unum은 °Celsius와 Kelvin 간의 변환을 안정적으로 처리할 수 없습니다.이 문제는 '잘못된 출처 문제'라고 합니다.0°C는 273.15K로 정의됩니다.이것은 실제로 특별하고 짜증나는 경우입니다. 일반적으로 값 0은 단위 변환에 영향을 받지 않기 때문입니다.0 [m] = 0 [마일] = ....여기서 Kelvin/°Celsius 변환은 인수 1과 273.15K의 오프셋을 특징으로 합니다.현재 버전의 Unum에서는 오프셋을 사용할 수 없습니다.

게다가 개념적 문제도 있기 때문에 아마도 향후 버전에는 통합되지 않을 것입니다.양이 절대 온도를 나타내는 경우 오프셋을 적용해야 하지만 양이 온도 차이를 나타내는 경우에는 적용하지 않아야 합니다.예를 들어 온도가 섭씨 1도 올라가면 1K가 올라가는 것과 같습니다.절대 온도인지 상대 온도인지 사용자의 마음 속에 무엇이 있는지 추측하는 것은 불가능합니다.대답이 변환 규칙에 영향을 주지 않기 때문에 절대 수량과 상대 수량에 대한 질문은 다른 단위에서는 중요하지 않습니다.Unum은 두 경우를 구별할 수 없습니다.

절대온도 변환을 기호적으로 표현하려고 할 때의 문제점을 개념적으로 보는 것은 꽤 쉽습니다.일반적인 상대 단위를 사용하면 (x unit) * 2 == (x * 2) unit—단위 수학은 교환 가능합니다.절대 온도를 사용하면 이것이 무너집니다. 다른 단위 치수가 없는 직선 온도 변환보다 더 복잡한 작업을 수행하는 것은 어렵습니다.모든 계산을 켈빈 단위로 유지하고 코드의 시작 및 종료 지점에서만 다른 온도 단위로 변환하는 것이 가장 좋습니다.

예를 들어 작동하는 방법 :

>>> T(0*F) + 10*C
T(265.37222222222221*K) # or T(47767/180*K)
>>> T(0*F + 10*C)
T(283.15*K)
>>> 0*F + T(10*C)
T(283.15*K)
>>> 0*F + 10*C
10*K
>>> T(0*F) + T(10*C)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'absolute_temperature' and \
'absolute_temperature'
>>> T(0*F) - T(10*C)
T(245.37222222222223*K) # or T(44167/180*K)
>>> 0*F - 10*C
-10*K

그만큼 나투 패키지는 온도 단위를 처리합니다. 예를 들어, 당신은 다음을 수행 할 수 있습니다.

>>> from natu.units import K, degC, degF
>>> T = 25*degC
>>> T/K
298.1500
>>> T/degF
77.0000
>>> 0*degC + 100*K
100.0 degC

접두사도 지원됩니다.

>>> from natu.units import mdegC
>>> 100*mdegC/K
273.2500

나투 또한 비선형 단위를 처리합니다 데시벨, 오프셋이있는 사람뿐만 아니라 섭씨 온도 그리고 화씨 학위.

첫 번째 예제와 관련하여 다음을 수행 할 수 있습니다.

>>> from natu import units
>>> 12*units.inch/units.m
0.3048

BTU 이미 내장되어 있습니다. 디스플레이 장치를 m ** 2*kg/s ** 2로 변경할 수 있지만 기본적으로 나투 장치를 J로 단순화합니다.

>>> from natu.units import BTU
>>> BTU.display = 'm2*kg/s2'
>>> 1*BTU
1055.05585262 J
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top