SkyCoord高級クラスを使用して¶
♪the SkyCoord
クラスは,座標フレーム間の天体座標表現,操作,変換に簡単で柔軟なユーザインタフェースを提供する.これは低級座標フレーム類の包装器として使用される高級クラスです ICRS
そして FK5
彼らは大部分の重活を担っている。
それらの主な違いは SkyCoord
低レベルのクラスもあります (座標系の使用と設計 )は以下のとおりである。
♪the
SkyCoord
オブジェクト中のすべての内蔵とユーザが定義した座標枠のフレーム属性の和集合.astropy.coordinates.frame_transform_graph
それがそうです。各フレームカテゴリは、フレームに必要な属性(例えば、春分、観測時間、または観察者位置)のみを保持する。これはつまりFK4
(附春分と観測時間)からICRS
(どちらも)戻ってこないFK4
下位クラスでは元の春分や観察時間は覚えていません。以来.SkyCoord
オブジェクトはすべての属性を格納し,このような往復変換は同じ座標オブジェクトに戻る.♪the
SkyCoord
クラスは、様々なユーザヘッダオプションおよび利用可能なデータフォーマットに適応するために、入力に関してより柔軟であり、Frameクラスは、角度単位を有する同様の数のオブジェクトを受信することを望む。♪the
SkyCoord
クラスには典型的な分析に有用な便利な手法が多い.現在のところ
SkyCoord
対象者はastropy.coordinates.frame_transform_graph
図形オブジェクトを変換する.
SkyCoordオブジェクトの作成¶
♪the SkyCoord
クラスは初期化のための様々な入力を受け付ける.少なくとも、これらの座標は、明確な単位を有する1つまたは複数の天座標値を提供しなければならない。これは必要ではないにもかかわらず、一般的に座標系を指定しなければならない。
よく見られるパターンを以下に示す.本説明では,大文字の値を以下に示す COORD
あるいは…。 FRAME
入力を表していますこれらの入力は Initialization Syntax 一節です。四角括弧の要素は [unit=UNIT]
オプションです。**
SkyCoord(COORD, [FRAME], keyword_args ...)
SkyCoord(LON, LAT, [frame=FRAME], [unit=UNIT], keyword_args ...)
SkyCoord([FRAME], <lon_attr>=LON, <lat_attr>=LAT, keyword_args ...)
以下の例は初期化を説明する. SkyCoord
相手。これらは,球面座標を用いて初期化を行うことを反映しており,これはすべての内蔵フレームのデフォルト設定である.異なる表現(例えばデカルトや円柱)の使用方法を理解するためには、前節を参照してください Representations それがそうです。まずいくつかの輸入:
>>> from astropy.coordinates import SkyCoord # High-level coordinates
>>> from astropy.coordinates import ICRS, Galactic, FK4, FK5 # Low-level frames
>>> from astropy.coordinates import Angle, Latitude, Longitude # Angles
>>> import astropy.units as u
>>> import numpy as np
実例.¶
位置パラメータとキーワードパラメータを用いて座標値とフレームワーク仕様を提供することができる.まず,RAとDECの位置パラメータを示す:
>>> SkyCoord(10, 20, unit='deg') # Defaults to ICRS
<SkyCoord (ICRS): (ra, dec) in deg
(10., 20.)>
>>> SkyCoord([1, 2, 3], [-30, 45, 8], frame='icrs', unit='deg')
<SkyCoord (ICRS): (ra, dec) in deg
[(1., -30.), (2., 45.), (3., 8.)]>
上の最初の例はフレームワークが明示的に与えられていないことに留意されたい。この場合、デフォルトはICRSシステムである(“J 2000”赤道座標に対してほぼ正しい)。しかしながら、ICRとして知られている場合、コードを読む人は誰でもその意図をよりよく理解することができるので、フレームを明示的に指定することは常により良い方法である。
一般的なフォーマットの文字列入力は受け入れ可能であり、フレームワークはクラスタイプとして提供することができる FK4
Frameクラスの例です SkyCoord
インスタンス(そこからフレームを抽出する)、またはフレーム名の小文字バージョンを文字列、例えば、 "fk4"
**
>>> coords = ["1:12:43.2 +1:12:43", "1 12 43.2 +1 12 43"]
>>> sc = SkyCoord(coords, frame=FK4, unit=(u.hourangle, u.deg), obstime="J1992.21")
>>> sc = SkyCoord(coords, frame=FK4(obstime="J1992.21"), unit=(u.hourangle, u.deg))
>>> sc = SkyCoord(coords, frame='fk4', unit='hourangle,deg', obstime="J1992.21")
>>> sc = SkyCoord("1h12m43.2s", "+1d12m43s", frame=Galactic) # Units from strings
>>> sc = SkyCoord("1h12m43.2s +1d12m43s", frame=Galactic) # Units from string
>>> sc = SkyCoord(l="1h12m43.2s", b="+1d12m43s", frame='galactic')
>>> sc = SkyCoord("1h12.72m +1d12.71m", frame='galactic')
データと SkyCoord
インスタンスはフレームとしてしか使用できない frame=
キーワードパラメータは、位置パラメータではない。
上に持つ ra
そして dec
属性は、他の多くの一般的なフォーマットの座標文字列を提供することができます。例は以下のとおりである.
>>> sc = SkyCoord("15h17+89d15")
>>> sc = SkyCoord("275d11m15.6954s+17d59m59.876s")
>>> sc = SkyCoord("8 00 -5 00.6", unit=(u.hour, u.deg))
>>> sc = SkyCoord("J080000.00-050036.00", unit=(u.hour, u.deg))
>>> sc = SkyCoord("J1874221.31+122328.03", unit=u.deg)
Astropy Quantity
-タイプオブジェクトを入力形式として受け入れることができ、奨励することができる:
>>> ra = Longitude([1, 2, 3], unit=u.deg) # Could also use Angle
>>> dec = np.array([4.5, 5.2, 6.3]) * u.deg # Astropy Quantity
>>> sc = SkyCoord(ra, dec, frame='icrs')
>>> sc = SkyCoord(ra=ra, dec=dec, frame=ICRS, obstime='2001-01-02T12:34:56')
最後に,下位座標フレームオブジェクトから初期化することができる.
>>> c = FK4(1 * u.deg, 2 * u.deg)
>>> sc = SkyCoord(c, obstime='J2010.11', equinox='B1965') # Override defaults
ここで強調表示される重要なポイントの1つは、低レベルのオブジェクトが作成されると、いくつかのデフォルト属性値を有することである。例えば FK4
枠組み用途. equinox='B1950.0
そして obstime=equinox
デフォルト値とします。このオブジェクトが初期化に使用される場合 SkyCoord
明示的に設定されていない下位オブジェクト属性をカバーすることができます。上の座標が作成されていれば c = FK4(1 * u.deg, 2 * u.deg, equinox='B1960')
そして作成したのは SkyCoord
様々な方法で equinox
例外を引き起こすことになります
初期化文法¶
球面表現(これは最も一般的であり、すべての内蔵フレームのデフォルト入力フォーマットでもある)、 SkyCoord
詳細は以下のとおりである.
SkyCoord(COORD, [FRAME | frame=FRAME], [unit=UNIT], keyword_args ...)
SkyCoord(LON, LAT, [DISTANCE], [FRAME | frame=FRAME], [unit=UNIT], keyword_args ...)
SkyCoord([FRAME | frame=FRAME], <lon_name>=LON, <lat_name>=LAT, [unit=UNIT],
keyword_args ...)
上記の説明では、全ての大文字の要素(例えば、 FRAME
)要素タイプを記述するユーザ入力。方形括弧内の要素は任意である。非球形入力については、ご参照ください Representations 一節です。
LON, LAT
経糸値および緯値は、別個の位置パラメータとして指定することができる。以下のオプションを使用して、経度および緯度:
単角値:
リストや
Quantity
角度値の配列またはNumPy配列Angle
,Longitude
, orLatitude
object, which can be scalar or array-valued
注釈
そして当を受ける. SkyCoord
経度および緯度コンポーネントの指定には柔軟であり,Frame類は受信を期待している. Quantity
−角度単位を有する類似オブジェクト(すなわち、 Angle
あるいは…。 Quantity
)である。例えば、コンポーネントが指定された場合、フレームカテゴリ(例えば、 ICRS
)を作成する必要があります
>>> ICRS(0 * u.deg, 0 * u.deg)
<ICRS Coordinate: (ra, dec) in deg
(0., 0.)>
他の柔軟な初期化方法(使用 SkyCoord
)は機能しません
>>> ICRS(0, 0, unit=u.deg)
UnitTypeError: Longitude instances require units equivalent to 'rad', but no unit was given.
DISTANCE
フレームの中心からオブジェクトまでの距離を指定することができる:
単一の距離値:
COORD
この入力フォームは,単一のオブジェクトを用いて座標データを提供する.球形座標フレームの場合、座標は、以下の1つまたは複数の緯度経度対を含むことができる。
LONとLAT値の単一の座標文字列をスペースで区切る.各値は、フォーマット化された任意の文字列であってもよい 創作 の
Longitude
あるいは…。Latitude
相手。このような座標文字列のリストまたはNumPy配列.
(LON,LAT)タプルリストであり、各LONおよびLATは、スカラ(配列ではない)である。
N x 2
NumPyまたはQuantity
値の配列であり、第1の列は経度であり、第2の列は緯度であり、例えば、[[270, -30], [355, +85]] * u.deg
それがそうです。(LON、LAT、DISTANCE)タプルリスト。
N x 3
NumPyまたはQuantity
列はそれぞれ経度,緯度,距離の値配列である.
入力は、必ずしも標準球面座標で表されないより一般的なオブジェクトであってもよい。
座標フレームオブジェクト(例えば、
FK4(1*u.deg, 2*u.deg, obstime='J2012.2')
)。SkyCoord
オブジェクト(オブジェクトのみをコピーする).BaseRepresentation
subclass object likeSphericalRepresentation
,CylindricalRepresentation
, orCartesianRepresentation
.
FRAME
This can be a BaseCoordinateFrame
frame class, an
instance of such a class, or the corresponding string alias. The frame
classes that are built in to Astropy are ICRS
,
FK5
, FK4
,
FK4NoETerms
, Galactic
, and
AltAz
. The string aliases are lowercase versions of the
class name.
フレームワークが提供されていない場合、特別なものが見られます ICRS
識別子です。これは,このフレームが指定されておらず,座標を比較する操作が許されていないことを示している(そのオブジェクト内であっても).
unit=UNIT
単位説明子は、以下の1つであってもよい。
Unit
物体は角度単位でありUnit('radian')
それがそうです。有効角度単位名を有する単一の文字列。
2元グループの
Unit
LONおよびLATユニットのオブジェクトまたは文字列ユニット名(例えば、('hourangle', 'degree')
)。コンマで区切られた2つのユニット名を有する単一の文字列(例えば、
'hourangle,degree'
)。
単一のデバイスのみが提供される場合、LONおよびLATに同時に適用される。
その他のキーワードパラメータ
位置パラメータを使用して経度および緯度を指定するのではなく、フレーム固有の名前をキーワードパラメータとして使用することができる。
- ra, dec: LON, LAT values, optional
RA and Dec for frames where these are representation, including [FIXME]
ICRS
,FK5
,FK4
, andFK4NoETerms
.- l, b: LON, LAT values, optional
銀河.銀河
l
そしてb
上のGalactic
フレームワーク。
以下のキーワードは、任意のフレームに指定することができる。
- 距離 :有効
Distance
初期値設定項、オプション 参考中心から震源までの距離
- 昏睡時間. :有効
Time
初期値設定項、オプション 時間を観察する
- 春分. :有効
Time
初期値設定項、オプション 座標フレーム分点
ユーザ定義フレームが変換マップに含まれ、追加のフレーム属性を有する場合、これらの属性は、対応するキーワードパラメータによって設定されてもよい。 SkyCoord
初期化します。
アレイ操作.¶
座標配列を格納することができます SkyCoord
オブジェクトであり、このようにして行われる操作は、個人リストをループトラバースするよりも数桁速い。 SkyCoord
物体です。
実例.¶
座標配列を格納する SkyCoord
対象::
>>> ra = np.linspace(0, 36000, 1001) * u.deg
>>> dec = np.linspace(-90, 90, 1001) * u.deg
>>> sc_list = [SkyCoord(r, d, frame='icrs') for r, d in zip(ra, dec)]
>>> timeit sc_gal_list = [c.galactic for c in sc_list]
1 loops, best of 3: 20.4 s per loop
>>> sc = SkyCoord(ra, dec, frame='icrs')
>>> timeit sc_gal = sc.galactic
100 loops, best of 3: 21.8 ms per loop
ベクトル化変換に加えて、同じ方法および属性を使用して、一般的な配列スライス、分割、および選択を実行することができます。 ndarray
実例です。同様に、On numpy
バージョン1.17以降、対応する機能、および形状に影響を与える他の機能、例えば atleast_1d
そして rollaxis
期待通りに仕事をします。(関連する機能は明示的に有効にされなければならない astropy
ソースコードが numpy
動作すべき関数はサポートされていないと思います):::
.. doctest-requires:: numpy>=1.17
>>> north_mask = sc.dec > 0
>>> sc_north = sc[north_mask]
>>> len(sc_north)
500
>>> sc[2:4]
<SkyCoord (ICRS): (ra, dec) in deg
[( 72., -89.64), (108., -89.46)]>
>>> sc[500]
<SkyCoord (ICRS): (ra, dec) in deg
(0., 0.)>
>>> sc[0:-1:100].reshape(2, 5)
<SkyCoord (ICRS): (ra, dec) in deg
[[(0., -90.), (0., -72.), (0., -54.), (0., -36.), (0., -18.)],
[(0., 0.), (0., 18.), (0., 36.), (0., 54.), (0., 72.)]]>
>>> np.roll(sc[::100], 1)
<SkyCoord (ICRS): (ra, dec) in deg
[(0., 90.), (0., -90.), (0., -72.), (0., -54.), (0., -36.),
(0., -18.), (0., 0.), (0., 18.), (0., 36.), (0., 54.),
(0., 72.)]>
注意してください ndarray
方法は、 flatten
新しいデータビューを使用しようとすると、不可能な場合にのみデータをコピーすることができる(例えば、NumPy文書で議論されているように reshape()
)。
在位修正座標オブジェクト¶
配列値における座標値 SkyCoord
対象をその場で修正することができる(Asterpy 4.1に加える).これは別のものから新しい値を設定する必要があります SkyCoord
オブジェクトは,そのオブジェクトは実座標データ値を除くすべての点で等価である.このように、フレーム変換を必要とせず、プロジェクト設定動作は非常にロバストである。
具体的には、右手 value
修正対象と厳密に一致しなければならない:
まったく同じクラス
等価フレームワーク (
is_equivalent_frame
)同じ表示タイプ(_TYPE)
同じ表現法はキーワードを区別することができる
同じフレーム属性
同じ“追加”フレーム属性(例えば、
obstime
ICRS座標について)
中の座標配列を修正する SkyCoord
対象Numpy配列に対して同じ文法を用いる:
>>> sc1 = SkyCoord([1, 2] * u.deg, [3, 4] * u.deg)
>>> sc2 = SkyCoord(10 * u.deg, 20 * u.deg)
>>> sc1[0] = sc2
>>> sc1
<SkyCoord (ICRS): (ra, dec) in deg
[(10., 20.), ( 2., 4.)]>
スカラーまたは配列値を挿入することができます SkyCoord
オブジェクトを別の互換性のあるものに追加する SkyCoord
対象::
>>> sc1 = SkyCoord([1, 2] * u.deg, [3, 4] * u.deg)
>>> sc2 = SkyCoord(10 * u.deg, 20 * u.deg)
>>> sc1.insert(1, sc2)
<SkyCoord (ICRS): (ra, dec) in deg
[( 1., 3.), (10., 20.), ( 2., 4.)]>
修正できる SkyCoord
対象在位時、すべて 表操作 例えば接続、スタック、挿入 SkyCoord
混合列(マスクが必要ない限り)。
これらの方法は比較的遅いですなぜなら既存の SkyCoord
オブジェクトは,操作が有効であることを確保するために広範な検証を行う.いくつかのアプリケーションの場合、部分的に説明したように、異なるより低いレベルの方法をとる必要がある場合がある 座標の高速定位置修正 それがそうです。
警告
座標オブジェクトをその場で修正するために、例えば、コンポーネント属性を直接更新するなど、明らかな方法を試みることができるかもしれません。 sc1.ra[1] = 40 * u.deg
それがそうです。しかしこれは 現れる 正しい結果を与えるために,実際には下位表現データを修正しない.これは,現在実現されている性能ベースのキャッシュに関連している.現在のキャッシュ実現でも,表示の定位置変更を扱うことはできない. (.data
)やフレーム属性など .obstime
それがそうです。
属性¶
♪the SkyCoord
対象には有用な属性が多く,これらの属性は非常に有用である.これらの内容を深く研究することで、私たちはいくつかのことを理解します SkyCoord
どうやって働いているのかということです
まず,対象属性や手法を学習する最も重要なツールの1つは“TAB-Discovery”である.IPythonでは、オブジェクト名、句読点を入力し、<TAB>キーを押して利用可能なコンテンツを表示することができます。これは通常文書を読むよりも速いです
>>> sc = SkyCoord(1, 2, frame='icrs', unit='deg', obstime='2013-01-02 14:25:36')
>>> sc.<TAB>
sc.T sc.match_to_catalog_3d
sc.altaz sc.match_to_catalog_sky
sc.barycentrictrueecliptic sc.name
sc.cartesian sc.ndim
sc.cirs sc.obsgeoloc
sc.copy sc.obsgeovel
sc.data sc.obstime
sc.dec sc.obswl
sc.default_representation sc.position_angle
sc.diagonal sc.precessedgeocentric
sc.distance sc.pressure
sc.equinox sc.ra
sc.fk4 sc.ravel
sc.fk4noeterms sc.realize_frame
sc.fk5 sc.relative_humidity
sc.flatten sc.represent_as
sc.frame sc.representation_component_names
sc.frame_attributes sc.representation_component_units
sc.frame_specific_representation_info sc.representation_info
sc.from_name sc.reshape
sc.from_pixel sc.roll
sc.galactic sc.search_around_3d
sc.galactocentric sc.search_around_sky
sc.galcen_distance sc.separation
sc.gcrs sc.separation_3d
sc.geocentrictrueecliptic sc.shape
sc.get_constellation sc.size
sc.get_frame_attr_names sc.skyoffset_frame
sc.guess_from_table sc.spherical
sc.has_data sc.spherical_offsets_to
sc.hcrs sc.squeeze
sc.heliocentrictrueecliptic sc.supergalactic
sc.icrs sc.swapaxes
sc.info sc.take
sc.is_equivalent_frame sc.temperature
sc.is_frame_attr_default sc.to_pixel
sc.is_transformable_to sc.to_string
sc.isscalar sc.transform_to
sc.itrs sc.transpose
sc.location sc.z_sun
ここで、私たちは多くの属性と方法を見ることができる。最も識別しやすいのは経度と緯度属性かもしれません ra
そして dec
上の ICRS
フレームワーク::
>>> sc.ra
<Longitude 1. deg>
>>> sc.dec
<Latitude 2. deg>
Next, notice that all of the built-in frame names icrs
, galactic
,
fk5
, fk4
, and fk4noeterms
are there. Through the magic of Python
properties, accessing these attributes calls the object
transform_to
method appropriately and returns a
new SkyCoord
object in the requested frame:
>>> sc_gal = sc.galactic
>>> sc_gal
<SkyCoord (Galactic): (l, b) in deg
(99.63785528, -58.70969293)>
Other attributes you may recognize are distance
, equinox
,
obstime
, and shape
.
深く掘り下げる.¶
[[臨時ユーザはこの部分をスキップすることができる]]
Galaxyに変換した後、現在、経糸値と緯糸値をマーキングします l
そして b
銀河系座標の一般的な慣例に従っています相手はどうやってその値を呼ぶか知っていますか?答えはあまり明らかではない属性です
>>> sc_gal.representation_component_names
{'l': 'lon', 'b': 'lat', 'distance': 'distance'}
>>> sc_gal.representation_component_units
{'l': Unit("deg"), 'b': Unit("deg")}
>>> sc_gal.representation_type
<class 'astropy.coordinates.representation.SphericalRepresentation'>
これらを加えて相手に教えます l
そして b
経度および緯度であり、いずれも度単位で球面座標(デカルト座標ではなく)として表示されるべきである。さらにフレームワークの representation_component_names
属性は、座標キーワードパラメータを定義し、このパラメータ SkyCoord
すべて受け入れます。
もう一つの重要な属性は frame_attr_names
これは,フレームワークを完全に定義するために必要な他の属性を定義する:
>>> sc_fk4 = SkyCoord(1, 2, frame='fk4', unit='deg')
>>> sc_fk4.get_frame_attr_names()
{'equinox': <Time object: scale='tt' format='byear_str' value=B1950.000>, 'obstime': None}
ユーザが明示的な値を提供していない場合、キー値はデフォルト値に対応する。この例は FK4
フレームは2つの属性を持っています equinox
そして obstime
これは、フレームを完全に定義するために必要である。
ここではいくつかのトリックが発生していますこれらの属性の多くは実際には基礎座標に属しているからです frame
対象者は実際の仕事の大部分を完成させる.これは対象とする三層システムにおける中間層:(球面,デカルトなど),フレーム(とも呼ばれる)を表す.低レベルのフレームワーク)と SkyCoord
(別名a.高級類を参照されたい 概要 astropy.coordinates 概念 そして 重要な定義 ):
>>> sc.frame
<ICRS Coordinate: (ra, dec) in deg
(1., 2.)>
>>> sc.has_data is sc.frame.has_data
True
>>> sc.frame.<TAB>
sc.frame.T sc.frame.ra
sc.frame.cartesian sc.frame.ravel
sc.frame.copy sc.frame.realize_frame
sc.frame.data sc.frame.represent_as
sc.frame.dec sc.frame.representation
sc.frame.default_representation sc.frame.representation_component_names
sc.frame.diagonal sc.frame.representation_component_units
sc.frame.distance sc.frame.representation_info
sc.frame.flatten sc.frame.reshape
sc.frame.frame_attributes sc.frame.separation
sc.frame.frame_specific_representation_info sc.frame.separation_3d
sc.frame.get_frame_attr_names sc.frame.shape
sc.frame.has_data sc.frame.size
sc.frame.is_equivalent_frame sc.frame.spherical
sc.frame.is_frame_attr_default sc.frame.squeeze
sc.frame.is_transformable_to sc.frame.swapaxes
sc.frame.isscalar sc.frame.take
sc.frame.name sc.frame.transform_to
sc.frame.ndim sc.frame.transpose
>>> sc.frame.name
'icrs'
♪the SkyCoord
対象が公開される frame
対象属性は自分の属性とする.一見困惑しているように見えるかもしれませんが、これは良いことです SkyCoord
相手と BaseCoordinateFrame
対象の行動は非常に類似しており,多くのルーチンは入力の1つを難なく受け取ることができる(アヒルがタイプした!)
スタックの中で最も低い層は抽象です UnitSphericalRepresentation
目標:
>>> sc_gal.frame.data
<UnitSphericalRepresentation (lon, lat) in rad
(1.73900863, -1.02467744)>
変換する.¶
前節では変換のテーマを詳しく紹介した。 システム間の変換 それがそうです。
完全のために、ここでいくつかの例を挙げます。座標および参照フレームが定義されると、フレームから別のフレームに変換することができる。これをいくつかの異なる方法で実現することができます:フレームワークのデフォルトバージョンのみが必要な場合、属性パターンアクセス(前述した)を使用することができます。より多くの制御を得るためには transform_to
方法では、この方法は、Frame名、Frameクラス、Frameインスタンス、またはFrameインスタンスを受け入れる SkyCoord
それがそうです。
実例.¶
1つのフレームから別のフレームに変換するには、以下の動作を実行してください。
>>> from astropy.coordinates import FK5
>>> sc = SkyCoord(1, 2, frame='icrs', unit='deg')
>>> sc.galactic
<SkyCoord (Galactic): (l, b) in deg
(99.63785528, -58.70969293)>
>>> sc.transform_to('fk5') # Same as sc.fk5 and sc.transform_to(FK5)
<SkyCoord (FK5: equinox=J2000.000): (ra, dec) in deg
(1.00000656, 2.00000243)>
>>> sc.transform_to(FK5(equinox='J1975')) # Transform to FK5 with a different equinox
<SkyCoord (FK5: equinox=J1975.000): (ra, dec) in deg
(0.67967282, 1.86083014)>
変化しています SkyCoord
例は、2つの座標が完全に同じ基準系列に位置することを保証する便利な方法である。
>>> sc2 = SkyCoord(3, 4, frame='fk4', unit='deg', obstime='J1978.123', equinox='B1960.0')
>>> sc.transform_to(sc2)
<SkyCoord (FK4: equinox=B1960.000, obstime=J1978.123): (ra, dec) in deg
(0.48726331, 1.77731617)>
表示法¶
これまで,我々はすべての例で球面座標表現を用いてきたが,これは内蔵フレームのデフォルト設定である.一般に、座標を初期化または使用するためには、異なる表現(例えば、デカルト表現またはシリンドリカル表現)を使用することが便利である。本節では,異なる表示形式を用いてオブジェクトを初期化する方法と,オブジェクトの表示形式をどのように変更するかについて議論する.製図表現対象自体の詳細については、ご参照ください 使用と設計座標表現法 それがそうです。
初期化¶
あなたが知るべき内容の大部分は次の例から推定することができ,前の球面表示文書を推定することで推定することもできる.初期化には設定が必要です representation_type
キーワードは、その表現に対応するコンポーネントを提供する。
実例.¶
球形以外の表示タイプ初期化オブジェクトを使用するには、以下の操作を実行してください。
>>> c = SkyCoord(x=1, y=2, z=3, unit='kpc', representation_type='cartesian')
>>> c
<SkyCoord (ICRS): (x, y, z) in kpc
(1., 2., 3.)>
>>> c.x, c.y, c.z
(<Quantity 1. kpc>, <Quantity 2. kpc>, <Quantity 3. kpc>)
他の変異体には
>>> SkyCoord(1, 2*u.deg, 3, representation_type='cylindrical')
<SkyCoord (ICRS): (rho, phi, z) in (, deg, )
(1., 2., 3.)>
>>> SkyCoord(rho=1*u.km, phi=2*u.deg, z=3*u.m, representation_type='cylindrical')
<SkyCoord (ICRS): (rho, phi, z) in (km, deg, m)
(1., 2., 3.)>
>>> SkyCoord(rho=1, phi=2, z=3, unit=(u.km, u.deg, u.m), representation_type='cylindrical')
<SkyCoord (ICRS): (rho, phi, z) in (km, deg, m)
(1., 2., 3.)>
>>> SkyCoord(1, 2, 3, unit=(None, u.deg, None), representation_type='cylindrical')
<SkyCoord (ICRS): (rho, phi, z) in (, deg, )
(1., 2., 3.)>
一般に,許容される文法は以下のとおりである.
SkyCoord(COORD, [FRAME | frame=FRAME], [unit=UNIT], [representation_type=REPRESENTATION],
keyword_args ...)
SkyCoord(COMP1, COMP2, [COMP3], [FRAME | frame=FRAME], [unit=UNIT],
[representation_type=REPRESENTATION], keyword_args ...)
SkyCoord([FRAME | frame=FRAME], <comp1_name>=COMP1, <comp2_name>=COMP2,
<comp3_name>=COMP3, [representation_type=REPRESENTATION], [unit=UNIT],
keyword_args ...)
この場合には keyword_args
今は要素が含まれています representation_type=REPRESENTATION
それがそうです。上記の説明では、全ての大文字の要素(例えば、 FRAME
)要素タイプを記述するユーザ入力。方形括弧内の要素は任意である。
COMP1, COMP2, COMP3
コンポーネント値は、別個の位置パラメータまたはキーワードパラメータとして指定することができる。このような形式では、入力を許可する適切なタイプは、表現の詳細に依存する。一般に,以下の入力フォームをサポートする.
単値:
コンポーネント類オブジェクト
純粋なデジタル値、帯
unit
単位のキーワードを指定する
リストまたはコンポーネントクラス配列、またはNumPy値配列
各表示コンポーネントは、汎用入力データを特定の単位を有する所定のオブジェクトクラスに変換するための指定されたクラス(“コンポーネントクラス”)を有する。これらのコンポーネント類は Quantity
級友たち。
COORD
この入力フォームは,単一のオブジェクトを用いて座標データを提供する.座標は、以下に示すように、1つまたは複数の座標位置を指定することができる。
明細書
(COMP1, .., COMP<M>)
タプルは、各コンポーネントがスカラ(配列ではない)であり、あります。M
表現中の部品です。通常は3つの構成要素がありますがいくつかは(例えばUnitSphericalRepresentation
)をより少なく持つことができる。N x M
NumPyまたはQuantity
値配列、その中でN
座標の数でありM
コンポーネントの数です。
REPRESENTATION
表示形式は BaseRepresentation
クラス(例えば、 CartesianRepresentation
)または文字列名としては、単に小文字の類名であり、持たない 'representation'
接尾辞(例えば、 'cartesian'
)。
作成に使われています SkyCoord
一般にオブジェクトは球形オブジェクトと同じである.
細かい点¶
利用可能な表示セットは動的であり,定義された表示クラスによって変化する可能性がある.内蔵表示法には:
名前.名前. |
クラス |
---|---|
|
|
|
|
|
|
|
|
|
各フレームは、すべての利用可能な表現を知っているが、異なるフレームは、同じ構成要素に対して異なる名前を使用することができる。一般的な例は Galactic
枠組み用途. l
そして b
ではなく ra
そして dec
上の lon
そして lat
のコンポーネントです。 SphericalRepresentation
それがそうです。
特定のフレームの場合、表現された完全リストおよびそれがどのようにすべての構成要素を命名するかを見るために、まず、データなしにフレームのインスタンスを作成し、その後、印刷する。 representation_info
物件::
>>> ICRS().representation_info
{astropy.coordinates.representation.CartesianRepresentation:
{'names': ('x', 'y', 'z'),
'units': (None, None, None)},
astropy.coordinates.representation.SphericalRepresentation:
{'names': ('ra', 'dec', 'distance'),
'units': (Unit("deg"), Unit("deg"), None)},
astropy.coordinates.representation.UnitSphericalRepresentation:
{'names': ('ra', 'dec'),
'units': (Unit("deg"), Unit("deg"))},
astropy.coordinates.representation.PhysicsSphericalRepresentation:
{'names': ('phi', 'theta', 'r'),
'units': (Unit("deg"), Unit("deg"), None)},
astropy.coordinates.representation.CylindricalRepresentation:
{'names': ('rho', 'phi', 'z'),
'units': (None, Unit("deg"), None)}
}
これは少し混乱していますがそれぞれの表現には dict
鍵が二つあった。
names
:各コンポーネントをこのフレームワークにどのように名前付けするかを定義する.units
:出力時の各コンポーネントの単位を定義し,その中でNone
ある特定の単位を強制しないことを意味する。
特定の座標例については、使用することができる representation_type
属性と representation_component_names
属性は,特定のクラスオブジェクトがどのキーワードを受け取るかを決定する.前者は、システムの表示クラス(例えば、赤道フレームに対して球形)を表し、後者は、そのフレームの名前をクラス上のコンポーネント名を表す辞書にマッピングする。
>>> import astropy.units as u
>>> icrs = ICRS(1*u.deg, 2*u.deg)
>>> icrs.representation_type
<class 'astropy.coordinates.representation.SphericalRepresentation'>
>>> icrs.representation_component_names
{'ra': 'lon', 'dec': 'lat', 'distance': 'distance'}
変更表示法¶
座標オブジェクトの表示形式を変更することができ,以下のようになる.これは実際には 何でもない 座標値を格納するオブジェクト内部データであるが、2つの方法でデータの外部ビューを変更する。
このオブジェクトは,新たな表示法によりそれ自身を印刷する.
利用可能な属性は、新しい表現の属性に一致するように変更される(例えば、
ra, dec, distance
至るx, y, z
)。
設ける representation_type
そこで変わったのは 財産性. 3 D空間における点を表す固有オブジェクト自体を変更することなく、オブジェクト(その外観)を修正する。
実例.¶
属性は座標オブジェクトの表示形式を変更する representation_type
**
>>> c = SkyCoord(x=1, y=2, z=3, unit='kpc', representation_type='cartesian')
>>> c
<SkyCoord (ICRS): (x, y, z) in kpc
(1., 2., 3.)>
>>> c.representation_type = 'cylindrical'
>>> c
<SkyCoord (ICRS): (rho, phi, z) in (kpc, deg, kpc)
(2.23606798, 63.43494882, 3.)>
>>> c.phi.to(u.deg)
<Angle 63.43494882 deg>
>>> c.x
Traceback (most recent call last):
...
AttributeError: 'SkyCoord' object has no attribute 'x'
>>> c.representation_type = 'spherical'
>>> c
<SkyCoord (ICRS): (ra, dec, distance) in (deg, deg, kpc)
(63.43494882, 53.3007748, 3.74165739)>
>>> c.representation_type = 'unitspherical'
>>> c
<SkyCoord (ICRS): (ra, dec) in deg
(63.43494882, 53.3007748)>
表示を設定するために任意の表示クラスを使用することもできます:
>>> from astropy.coordinates import CartesianRepresentation
>>> c.representation_type = CartesianRepresentation
変更することなく、特定の表示形式だけが必要であれば注意してください SkyCoord
対象は変更すべきである astropy.coordinates.SkyCoord.represent_as()
方法:
>>> c.representation_type = 'spherical'
>>> cart = c.represent_as(CartesianRepresentation)
>>> cart
<CartesianRepresentation (x, y, z) in kpc
(1., 2., 3.)>
>>> c.representation_type
<class 'astropy.coordinates.representation.SphericalRepresentation'>
例1:Aitoff投影におけるランダムデータの描画¶
これはAitoff投影におけるデータを用いてAitoff投影に描画を描画する方法の一例である. SkyCoord
相手。ここでは,ランダムに生成したデータセットを用いる.
まず、私たちは必要なカバンを導入する必要がある。私たちは matplotlib ここで共謀して numpy πの値を得てランダムなデータを生成する.
>>> from astropy import units as u
>>> from astropy.coordinates import SkyCoord
>>> import numpy as np
我々は現在可視化のためのランダムデータを生成する.RAでは、0から360度の範囲で完成しています (ra_random
)、DECは-90度から+90度 (dec_random
)である。最後にこれらの値を度数で掛け合わせて Quantity
度単位で。
>>> ra_random = np.random.rand(100)*360.0 * u.degree
>>> dec_random = (np.random.rand(100)*180.0-90.0) * u.degree
As the next step, those coordinates are transformed into an
astropy.coordinates
SkyCoord
object.
>>> c = SkyCoord(ra=ra_random, dec=dec_random, frame='icrs')
Matplotlibはアークとアークの間の座標を必要とするからである \(-\pi\) そして \(\pi\) 0とではなく \(2\pi\) 私たちは彼らの考えを変えなければならない。そのためには astropy.coordinates.Angle
オブジェクトは、ここで180を包装するために使用される特別な方法を提供する。
>>> ra_rad = c.ra.wrap_at(180 * u.deg).radian
>>> dec_rad = c.dec.radian
最後のステップとして,matplotlibを用いて描画環境を設定し,特定のタイトル,メッシュ,充填円をマーカとして持つAitoff投影を用い,マーカサイズは2,Alpha値は0.3とした.我々が用いた図形のx-y比はこのような投影に非常に適しており,軸ラベルと重ならないように見出しを通常の位置から上方に移動させる.
>>> import matplotlib.pyplot as plt
>>> plt.figure(figsize=(8,4.2))
>>> plt.subplot(111, projection="aitoff")
>>> plt.title("Aitoff projection of our random data")
>>> plt.grid(True)
>>> plt.plot(ra_rad, dec_rad, 'o', markersize=2, alpha=0.3)
>>> plt.subplots_adjust(top=0.95,bottom=0.0)
>>> plt.show()
例2:突起と円盤に恒星位置を描画する¶
これはAitoff投影におけるデータを使用してAitoff投影において描画を描画する方法を示すより現実的な例である SkyCoord
相手。ここでは、銀河突起とディスク内の2つの恒星にランダムに生成されたデータセット(多元正規分布)を用いる。この2種類の描画は、異なる数字カウントを使用する。
前の例と同様に,まず必要なパケットを導入する.
>>> from astropy import units as u
>>> from astropy.coordinates import SkyCoord
>>> import numpy as np
現在,以下のツールを用いて可視化のためのランダムデータを生成する. numpy.random.Generator.multivariate_normal
それがそうです。
>>> disk = np.random.multivariate_normal(mean=[0,0,0], cov=np.diag([1,1,0.5]), size=5000)
>>> bulge = np.random.multivariate_normal(mean=[0,0,0], cov=np.diag([1,1,1]), size=500)
>>> galaxy = np.concatenate([disk, bulge])
As the next step, those coordinates are transformed into an
astropy.coordinates
SkyCoord
object.
>>> c_gal = SkyCoord(galaxy, representation_type='cartesian', frame='galactic')
>>> c_gal_icrs = c_gal.icrs
同様に、前の例と同様に、座標をアークに変換し、それらがあることを確認する必要があります \(-\pi\) そして \(\pi\) :
>>> ra_rad = c_gal_icrs.ra.wrap_at(180 * u.deg).radian
>>> dec_rad = c_gal_icrs.dec.radian
前の例と同様の印刷設定を使用します。
>>> import matplotlib.pyplot as plt
>>> plt.figure(figsize=(8,4.2))
>>> plt.subplot(111, projection="aitoff")
>>> plt.title("Aitoff projection of our random data")
>>> plt.grid(True)
>>> plt.plot(ra_rad, dec_rad, 'o', markersize=2, alpha=0.3)
>>> plt.subplots_adjust(top=0.95,bottom=0.0)
>>> plt.show()
SkyCoord対象を比較する¶
2つの主な比較方法があります SkyCoord
対象間の関係。まず,座標が互いに指定された距離内にあるかどうかを調べることである.これは,浮動小数点表現問題による許容差を許すため,多くのユーザが彼らの科学的あるいは処理分析作業で行うべきことである.2つ目は2つの対象の正確な等価性を検査することであり,これはテストを作成する開発者に最も有用である.
以下の例は、往復変換FK 4=>ICRS=>FK 4を実行し、比較を行う精密等価比較を用いた浮動小数点問題を示す。
>>> sc1 = SkyCoord(1*u.deg, 2*u.deg, frame='fk4')
>>> sc1.icrs.fk4 == sc1
False
公差内に一致する.¶
座標がお互いのある角度距離内にあるかどうかをテストする場合は、ご利用ください separation
方法:
>>> sc1.icrs.fk4.separation(sc1).to(u.arcsec)
<Angle 7.98873629e-13 arcsec>
>>> sc1.icrs.fk4.separation(sc1) < 1e-9 * u.arcsec
True
まったく等しい.¶
Astropyはまた座標の精密な等価演算子を提供する.例えば、例えば2つを比較すると SkyCoord
対象::
>>> left_skycoord == right_skycoord
右オブジェクトは左オブジェクトと厳密に一致しなければ比較できない:
まったく同じクラス
等価フレームワーク (
is_equivalent_frame
)同じ表示タイプ(_TYPE)
同じ表現法はキーワードを区別することができる
同じフレーム属性
同じ“追加”フレーム属性(例えば、
obstime
ICRS座標について)
第1の例では、配列値座標を用いて簡単な比較を行う。
>>> sc1 = SkyCoord([1, 2]*u.deg, [3, 4]*u.deg)
>>> sc2 = SkyCoord([1, 20]*u.deg, [3, 4]*u.deg)
>>> sc1 == sc2 # Array-valued comparison
array([ True, False])
>>> sc2 == sc2[1] # Broadcasting comparison with a scalar
array([False, True])
>>> sc2[0] == sc2[1] # Scalar to scalar comparison
False
>>> sc1 != sc2 # Not equal
array([False, True])
等しい比較には,成分データ(速度を含むことができる)を表すデータを数値的に比較するほか,すべてのフレーム属性が類似している厳密なテストも含まれる. equinox
あるいは…。 obstime
全く同じです。属性のいずれの不一致も例外を引き起こす.例えば:
>>> sc1 = SkyCoord([1, 2]*u.deg, [3, 4]*u.deg)
>>> sc2 = SkyCoord([1, 20]*u.deg, [3, 4]*u.deg, obstime='2020-01-01')
>>> sc1 == sc2
...
ValueError: cannot compare: extra frame attribute 'obstime' is not equivalent
(perhaps compare the frames directly to avoid this exception)
本例では、 obstime
属性はICRS座標フレームに直接適用されないいわゆる“余分”フレーム属性である.したがって,今回は以下と比較することができる. !=
品種演算子::
>>> sc1.frame != sc2.frame
array([False, True])
1つのやや特殊な場合は、両方ともデータがないフレームを比較することであり、返り値と frame1.is_equivalent_frame(frame2)
それがそうです。例えば:
>>> from astropy.coordinates import FK4
>>> FK4() == FK4(obstime='2020-01-01')
False
便利な方法¶
利用可能な便利な方法がたくさんあります。次の使用可能な文書文字列を読むことをお勧めします。
より多くの情報と例については、参照されたい 色分解、オフセット、ディレクトリマッチング、および関連機能 そして 空間運動会計 それがそうです。