标准单位#

标准单位在 astropy.units 打包为对象实例。

所有单位都是用基本的“不可约”单位来定义的。不可约单位包括:

  • 长度(米)

  • 时间(秒)

  • 质量(千克)

  • 电流(安培)

  • 温度(开尔文)

  • 角距离(弧度)

  • 立体角(立体角)

  • 发光强度(坎德拉)

  • 星等

  • 物质量(摩尔)

  • 光子计数(光子)

(还有一些更鲜为人知的基本单位,需要 FITS Standard 不再推荐使用。)

涉及基本单位组合的单元是 CompositeUnit . 在大多数情况下,您不需要担心各种各样的单元类,除非您想设计更复杂的情况。

模块中已预定义了许多单位。您可以使用 find_equivalent_units() 方法列出给定类型的所有现有预定义单位::

>>> from astropy import units as u
>>> u.g.find_equivalent_units()
  Primary name | Unit definition | Aliases
[
  M_e          | 9.10938e-31 kg  |                                  ,
  M_p          | 1.67262e-27 kg  |                                  ,
  earthMass    | 5.97217e+24 kg  | M_earth, Mearth                  ,
  g            | 0.001 kg        | gram                             ,
  jupiterMass  | 1.89812e+27 kg  | M_jup, Mjup, M_jupiter, Mjupiter ,
  kg           | irreducible     | kilogram                         ,
  solMass      | 1.98841e+30 kg  | M_sun, Msun                      ,
  t            | 1000 kg         | tonne                            ,
  u            | 1.66054e-27 kg  | Da, Dalton                       ,
]

前缀#

大多数单位都可以与前缀一起使用,标准的 SI 前缀和 IEEE 1514-2002 二进制前缀(用于 bitbyte )支持:

可用的十进制前缀

符号

前缀

价值

Q

奎达-

1e30

R

罗娜-

第1集第27集

Y

约塔-

1e24型

Z

泽塔-

1e21型

E

埃克斯-

1e18型

P

善待动物组织-

1e15型

T

特拉-

1e12型

G

千兆-

1e9级

M

百万-

1e6级

K

公斤-

1e3级

H

赫克托-

1e2级

DA

德卡-,德卡

1级

D

迪西-

1e-1级

C

厘-

1e-2级

百万-

1e-3级

U

微型-

1e-6级

N号

纳米-

1e-9级

皮科-

1e-12级

F

费托-

1e-15级

阿托-

1e-18号

Z

玉米-

1e-21号

Y

约克托-

1e-24号

R

隆托-

1E-27

问:

奎克托-

1E-30

可用的二进制前缀

符号

前缀

价值

基比-

2**10年

惯性矩

梅比-

2**20年

地理标志

基比-

2**30年

Ti公司

特比-

2**40

圆周率

佩比-

2**50

工程安装

exbi公司-

2**60

无量纲单位#

除了这些单位, astropy.units 包括无量纲单位的概念,用于表示没有物理尺寸的量。这在概念上不同于等于 None :表示数据中或用户未指定单位。

为了方便起见,有一个既无量纲又无标度的单位:the dimensionless_unscaled 对象:

>>> u.dimensionless_unscaled
Unit(dimensionless)

无量纲量通常被定义为不是无量纲的量的乘积或比值,但当它们的幂次相乘时,它们的量纲就抵消了。

实例#

使用 dimensionless_unscaled 对象:

>>> u.m / u.m
Unit(dimensionless)

为了与 单位和数量的字符串表示法 ,这相当于 Unit('')Unit(1) ,尽管使用 u.dimensionless_unscaled 在Python中,首选代码为可读性::

>>> u.dimensionless_unscaled == u.Unit('')
True
>>> u.dimensionless_unscaled == u.Unit(1)
True

请注意,在许多情况下,无量纲单位也可能有刻度。例如::

>>> (u.km / u.m).decompose()
Unit(dimensionless with a scale of 1000.0)
>>> (u.km / u.m).decompose() == u.dimensionless_unscaled
False

举个例子说明为什么你想创建一个标度的无量纲量,假设你要用一个大的单位数来做很多计算, big_unitless_num = 20000000  # 20 million ,但你希望你所有的答案都是百万的倍数。这可以通过除法来实现 big_unitless_num 通过 1e6 ,但这需要您记住,此比例因子已应用,这在多次计算后可能很难实现。相反,通过将值乘以 Unit(scale) 跟踪比例因子。例如::

>>> scale = 1e6
>>> big_unitless_num = 20 * u.Unit(scale)  # 20 million

>>> some_measurement = 5.0 * u.cm
>>> some_measurement * big_unitless_num  
<Quantity 100. 1e+06 cm>

要确定单位是否无量纲(但不考虑比例),请使用 physical_type 属性:

>>> (u.km / u.m).physical_type
PhysicalType('dimensionless')
>>> # This also has a scale, so it is not the same as u.dimensionless_unscaled
>>> (u.km / u.m) == u.dimensionless_unscaled
False
>>> # However, (u.m / u.m) has a scale of 1.0, so it is the same
>>> (u.m / u.m) == u.dimensionless_unscaled
True

启用其他单位#

默认情况下,只搜索“默认”单位 find_equivalent_units() 以及类似的搜索方法。这包括 SICGS 和天体物理单位。但是,您可能希望启用 Imperial 或其他用户定义的单位。

例子#

要启用英制单位,请执行以下操作:

>>> from astropy.units import imperial
>>> imperial.enable()
<astropy.units.core._UnitContext object at ...>
>>> u.m.find_equivalent_units()
  Primary name | Unit definition | Aliases
[
  AU           | 1.49598e+11 m   | au, astronomical_unit            ,
  Angstrom     | 1e-10 m         | AA, angstrom                     ,
  cm           | 0.01 m          | centimeter                       ,
  earthRad     | 6.3781e+06 m    | R_earth, Rearth                  ,
  ft           | 0.3048 m        | foot                             ,
  fur          | 201.168 m       | furlong                          ,
  inch         | 0.0254 m        |                                  ,
  jupiterRad   | 7.1492e+07 m    | R_jup, Rjup, R_jupiter, Rjupiter ,
  lsec         | 2.99792e+08 m   | lightsecond                      ,
  lyr          | 9.46073e+15 m   | lightyear                        ,
  m            | irreducible     | meter                            ,
  mi           | 1609.34 m       | mile                             ,
  micron       | 1e-06 m         |                                  ,
  mil          | 2.54e-05 m      | thou                             ,
  nmi          | 1852 m          | nauticalmile, NM                 ,
  pc           | 3.08568e+16 m   | parsec                           ,
  solRad       | 6.957e+08 m     | R_sun, Rsun                      ,
  yd           | 0.9144 m        | yard                             ,
]

这也可以与 Python "with" statement ,临时启用附加设备:

>>> with imperial.enable():
...     print(u.m.find_equivalent_units())
      Primary name | Unit definition | Aliases
...

要仅启用特定设备,请使用 add_enabled_units() **

>>> with u.add_enabled_units([imperial.knot]):
...     print(u.m.find_equivalent_units())
      Primary name | Unit definition | Aliases
...