LoginSignup
1
2

More than 1 year has passed since last update.

MetPyの単位変換 その2

Posted at

はじめに

前回,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')>

めでたく同じ単位へ辿り着いた.掛け算や割り算の多い数式を組むときに重宝しそう

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2