座標の高速定位置修正

いくつかのアプリケーションについては、使用をお勧めします 在位修正座標オブジェクト このプロセスでは正確性を保証するために広範な検証が実行されているので、十分ではないかもしれない。同様に、異なるデータを有する別の座標枠を作成するために使用されることが分かるかもしれません realize_frame あなたの性能要求に合いません。

これらの高性能な場合には、次の例に示すように、Frameオブジェクトの表示データを直接修正することができます。

>>> import astropy.units as u
>>> from astropy.coordinates import SkyCoord
>>> sc = SkyCoord([1,2],[3,4], unit='deg')
>>> sc.data.lon[()] = [10, 20] * u.deg
>>> sc.data.lat[1] = 40 * u.deg

>>> sc.cache.clear()  # IMPORTANT TO DO THIS!

>>> sc  
<SkyCoord (ICRS): (ra, dec) in deg
    [(10., 3.), (20., 40.)]>

気がつく .data オブジェクトが使用することを表すコンポーネント名は,座標オブジェクト中の名前とは異なる.フレーム属性間のマッピングをチェックしたい場合(例えば、 .ra )および表現属性(例えば、 .lon )以下の辞書を見ることができます。

>>> sc.representation_component_names
{'ra': 'lon', 'dec': 'lat', 'distance': 'distance'}

警告

お前 must キャッシュを消去する手順を含むものを図に示す.そうでなければ、対象が一致しないことを招き、間違った結果を招く可能性がある。 SkyCoord そして BaseCoordinateFrame 性能上様々な情報をキャッシュするため,必要に応じて新たな表示値を使用するためにキャッシュを消去する必要がある.

フレーム内のデータを修正する唯一の方法は使用であることに注意すべきです .data 属性は,フレームワーク上のコンポーネントのエイリアスではない.例えば、以下のコードは 現れる 正しい結果を与えるためには,実際には下位表示データを修正せず,以下の操作を実行してください.

>>> sc.ra[1] = 20 * u.deg  # THIS IS WRONG

この問題は,現在の性能に基づくキャッシュ実現に関係しており,解決が容易ではない.