はじめに
前回,MetPyでは計算中の単位変換を”よろしく”やってくれる,と説明したが,正しくは,
「足し算」はよろしくやってくれるみたいだが
「掛け算」は注意が必要
なようなので,簡単にまとめる
metpy.constants
気体定数をデモ的に利用する.ありがたいことに,MetPyには気象にまつわる定数が用意されている.
from metpy.units import units
import metpy.constants as mC # mCは個人的なネーミングです
Rd = mC.dry_air_gas_constant # 乾燥空気の気体定数
Rv = mC.water_gas_constant # 水蒸気の気体定数
Rd,Rvどちらも同じ単位と思いきや,
Rd
287.04749097718457 <Unit('joule / kelvin / kilogram')>
Rv
0.46152311572606086 <Unit('joule / gram / kelvin')>
kilogramとgram,微妙に単位が異なる(!)
ひとまずkilogramに揃えたRvを用意する(Rv_kg
)
Rv_g = Rv # gramのRvも残しておく
Rv_kg = Rv.to('joule / kelvin / kilogram')
Rv_kg
461.52311572606084 <Unit('joule / kelvin / kilogram')>
足し算
#
Rd + Rv_g
748.5706067032454 <Unit('joule / kelvin / kilogram')>
Rd + Rv_kg
748.5706067032454 <Unit('joule / kelvin / kilogram')>
Rv_g + Rd
0.7485706067032454 <Unit('joule / gram / kelvin')>
足し算の場合,先に書いた変数の単位に揃えられる.(気温の場合,引き算がややこしくなるが,割愛)
掛け算,割り算
Rd * Rv_kg
132479.05239713856 <Unit('joule ** 2 / kelvin ** 2 / kilogram ** 2')>
Rd * Rv_g
132.47905239713856 <Unit('joule ** 2 / gram / kelvin ** 2 / kilogram')>
一方,掛け算の際は単位の変換は行われず,kilogramとgramが共存した状態で返ってくる.勝手にやってくれるものと思っていたので少し残念.多分何か理由があるのだと思うが.
Tutorialにある,.to_base_units()を使ってみる.
(Rd * Rv_g).to_base_units()
132479.05239713856 <Unit('meter ** 4 / kelvin ** 2 / second ** 4')>
(Rd * Rv_kg).to_base_units()
132479.05239713856 <Unit('meter ** 4 / kelvin ** 2 / second ** 4')>
めでたく同じ単位へ辿り着いた.掛け算や割り算の多い数式を組むときに重宝しそう