アクセス表.¶
アクセス表の属性とデータは、通常、基本インタフェースと一致する numpy
構造化配列.
基礎知識.¶
高速な概要のために,次のコードはアクセス表データの基本知識を示す.関連する箇所には、どのオブジェクトを返すかに関する注釈があります。別の説明がない限り、テーブルアクセスは、元の表データまたは属性を更新するために修正可能なオブジェクトを返す。別項参照 複製と引用 この話題についてより多くの情報を知ることができます
机を作る **
from astropy.table import Table
import numpy as np
arr = np.arange(15).reshape(5, 3)
t = Table(arr, names=('a', 'b', 'c'), meta={'keywords': {'key1': 'val1'}})
表属性. **
t.columns # Dict of table columns (access by column name, index, or slice)
t.colnames # List of column names
t.meta # Dict of meta-data
len(t) # Number of table rows
アクセス表データ **
t['a'] # Column 'a'
t['a'][1] # Row 1 of column 'a'
t[1] # Row obj for with row 1 values
t[1]['a'] # Column 'a' of row 1
t[2:5] # Table object with rows 2:5
t[[1, 3, 4]] # Table object with rows 1, 3, 4 (copy)
t[np.array([1, 3, 4])] # Table object with rows 1, 3, 4 (copy)
t[[]] # Same table definition but with no rows of data
t['a', 'c'] # Table with cols 'a', 'c' (copy)
dat = np.array(t) # Copy table data to numpy structured array object
t['a'].quantity # an astropy.units.Quantity for Column 'a'
t['a'].to('km') # an astropy.units.Quantity for Column 'a' in units of kilometers
t.columns[1] # Column 1 (which is the 'b' column)
t.columns[0:2] # New table with columns 0 and 1
注釈
ほぼ等しいように見えますが、それらの間には2つの性能差の要素があります t[1]['a']
(スピードが遅い、中級だから Row
オブジェクトが作成された)と t['a'][1]
(もっと速い)。できれば、常に後者を使ってください。
印刷表や列 **
print(t) # Print formatted version of table to the screen
t.pprint() # Same as above
t.pprint(show_unit=True) # Show column unit
t.pprint(show_name=False) # Do not show column names
t.pprint_all() # Print full table no matter how long / wide it is (same as t.pprint(max_lines=-1, max_width=-1))
t.more() # Interactively scroll through table like Unix "more"
print(t['a']) # Formatted column values
t['a'].pprint() # Same as above, with same options as Table.pprint()
t['a'].more() # Interactively scroll through column
lines = t.pformat() # Formatted table as a list of lines (same options as pprint)
lines = t['a'].pformat() # Formatted column values as a list
細かい点¶
以下のすべての例について、以下のようにテーブルが作成されたと仮定する。
>>> from astropy.table import Table, Column
>>> import numpy as np
>>> import astropy.units as u
>>> arr = np.arange(15, dtype=np.int32).reshape(5, 3)
>>> t = Table(arr, names=('a', 'b', 'c'), meta={'keywords': {'key1': 'val1'}})
>>> t['a'].format = "%6.3f" # print as a float with 3 digits after decimal point
>>> t['a'].unit = 'm sec^-1'
>>> t['a'].description = 'unladen swallow velocity'
>>> print(t)
a b c
m sec^-1
-------- --- ---
0.000 1 2
3.000 4 5
6.000 7 8
9.000 10 11
12.000 13 14
注釈
In the example above the format
, unit
, and description
attributes
of the Column
were set directly. For 混合柱
like Quantity
you must set via the info
attribute, for
example, t['a'].info.format = "%6.3f"
. You can use the info
attribute with Column
objects as well, so the general
solution that works with any table column is to set via the info
attribute. See 混合属性 for more information.
要約情報¶
この表に関する要約情報は、以下のように取得することができます。
>>> t.info
<Table length=5>
name dtype unit format description
---- ----- -------- ------ ------------------------
a int32 m sec^-1 %6.3f unladen swallow velocity
b int32
c int32
関数として呼び出すと,提供することができる option
これは、返すメッセージタイプを指定します。内蔵の option
選択可能なのは attributes
(列属性、これはデフォルト属性)または stats
(基本列統計情報).♪the option
パラメータはまた、利用可能なオプションリストであってもよい:
>>> t.info('stats')
<Table length=5>
name mean std min max
---- ---- ------------- --- ---
a 6.0 4.24264068712 0 12
b 7.0 4.24264068712 1 13
c 8.0 4.24264068712 2 14
>>> t.info(['attributes', 'stats'])
<Table length=5>
name dtype unit format description mean std min max
---- ----- -------- ------ ------------------------ ---- ------------- --- ---
a int32 m sec^-1 %6.3f unladen swallow velocity 6.0 4.24264068712 0 12
b int32 7.0 4.24264068712 1 13
c int32 8.0 4.24264068712 2 14
列はまだ持っている info
アクションおよびパラメータを有する属性であるが、単一の列に関する情報を提供する:
>>> t['a'].info
name = a
dtype = int32
unit = m sec^-1
format = %6.3f
description = unladen swallow velocity
class = Column
n_bad = 0
length = 5
>>> t['a'].info('stats')
name = a
mean = 6.0
std = 4.24264068712
min = 0
max = 12
n_bad = 0
length = 5
アクセス属性¶
次のコードはアクセスリストを以下のように表示する TableColumns
オブジェクトは,列名,表メタデータ,表行数を取得する.表メタデータは秩序辞書です (OrderedDict) デフォルトの場合。**
>>> t.columns
<TableColumns names=('a','b','c')>
>>> t.colnames
['a', 'b', 'c']
>>> t.meta # Dict of meta-data
{'keywords': {'key1': 'val1'}}
>>> len(t)
5
データにアクセスする¶
案の定、名前でリストにアクセスし、その列からデジタルインデックス付き要素を取得することができます:
>>> t['a'] # Column 'a'
<Column name='a' dtype='int32' unit='m sec^-1' format='%6.3f' description='unladen swallow velocity' length=5>
0.000
3.000
6.000
9.000
12.000
>>> t['a'][1] # Row 1 of column 'a'
3
表列を印刷する際には、 format
属性(参照 書式説明子 )である。上の列表示形式と以下のように表示される点の違いに注意してください print()
あるいは…。 str()
**
>>> print(t['a'])
a
m sec^-1
--------
0.000
3.000
6.000
9.000
12.000
同様に、表行およびその行の列を選択することができる。
>>> t[1] # Row object corresponding to row 1
<Row index=1>
a b c
m sec^-1
int32 int32 int32
-------- ----- -----
3.000 4 5
>>> t[1]['a'] # Column 'a' of row 1
3
A Row
オブジェクトはその親表と同じ列とメタデータを持つ:
>>> t[1].columns
<TableColumns names=('a','b','c')>
>>> t[1].colnames
['a', 'b', 'c']
表をスライスすると、スライス領域内の元のデータが参照される新しい表オブジェクトが返される(参照)。 複製と引用 )である。表のメタデータと列定義をコピーする.**
>>> t[2:5] # Table object with rows 2:5 (reference)
<Table length=3>
a b c
m sec^-1
int32 int32 int32
-------- ----- -----
6.000 7 8
9.000 10 11
12.000 13 14
テーブル行は、インデックス配列を使用して、または複数の列名を指定することで選択することができる。これは、選択された行または列の元の表のコピーを返す。**
>>> print(t[[1, 3, 4]]) # Table object with rows 1, 3, 4 (copy)
a b c
m sec^-1
-------- --- ---
3.000 4 5
9.000 10 11
12.000 13 14
>>> print(t[np.array([1, 3, 4])]) # Table object with rows 1, 3, 4 (copy)
a b c
m sec^-1
-------- --- ---
3.000 4 5
9.000 10 11
12.000 13 14
>>> print(t['a', 'c']) # or t[['a', 'c']] or t[('a', 'c')]
... # Table with cols 'a', 'c' (copy)
a c
m sec^-1
-------- ---
0.000 2
3.000 5
6.000 8
9.000 11
12.000 14
条件を使用して表から行を選択してブーリアンマスクを作成することができる.ブール配列を使用してインデックスを作成するテーブルは、マスク配列要素が存在する行のみを返す。 True
それがそうです。ビット演算子ごとに異なる条件を組み合わせることができる.**
>>> mask = (t['a'] > 4) & (t['b'] > 8) # Table rows where column a > 4
>>> print(t[mask]) # and b > 8
...
a b c
m sec^-1
-------- --- ---
9.000 10 11
12.000 13 14
最後に、当機として基礎表データにアクセスすることができます numpy
コピーまたは参照の作成を使用して構造化配列を作成する np.array
**
>>> data = np.array(t) # copy of data in t as a structured array
>>> data = np.array(t, copy=False) # reference to data in t
表が等しい¶
2つの異なる方法で表データの一貫性をチェックすることができます
♪the
==
比較演算子。これは1つに戻りますTrue
あるいは…。False
すべての行について 整行する. マッチです。これは行為と同じですnumpy
構造化配列.表
values_equal()
表の値を要素ごとに比較するには,以下の操作を実行してください.これはブール値に戻りますTrue
あるいは…。False
それぞれの表に対して 元素.元素 だからあなたは1つを得ることができますTable
価値観。
実例.¶
テーブルが等しいかどうかをチェックするには、以下の操作を実行してください。
>>> t1 = Table(rows=[[1, 2, 3],
... [4, 5, 6],
... [7, 7, 9]], names=['a', 'b', 'c'])
>>> t2 = Table(rows=[[1, 2, -1],
... [4, -1, 6],
... [7, 7, 9]], names=['a', 'b', 'c'])
>>> t1 == t2
array([False, False, True])
>>> t1.values_equal(t2) # Compare to another table
<Table length=3>
a b c
bool bool bool
---- ----- -----
True True False
True False True
True True True
>>> t1.values_equal([2, 4, 7]) # Compare to an array column-wise
<Table length=3>
a b c
bool bool bool
----- ----- -----
False True False
True False False
True True False
>>> t1.values_equal(7) # Compare to a scalar column-wise
<Table length=3>
a b c
bool bool bool
----- ----- -----
False False False
False False False
True True False
フォーマット印刷.¶
フォーマットテーブルとしてテーブルまたは列の値を印刷または検索する方法のうちの1つを使用することができる。
print()
機能します。表
pformat()
または列pformat()
方法は、フォーマットされたテーブルまたは列を固定幅文字列リストの形態で返す。これは保存表のショートカットとして用いることができる.
これらの方法は 書式説明子 利用可能であれば,出力に可読性を持たせるように努力する.デフォルトでは、フォームおよび列印刷は、利用可能な対話型画面サイズよりも大きいフォームを印刷しない。画面サイズ(非インタラクティブ環境またはWindows上)が決定できない場合には、25行×80列のデフォルトサイズが使用されます。テーブルが大きすぎる場合は、行および/または列を中間から切り出して適合させる。
例を引く¶
フォーマットテーブルを印刷するには、以下の操作を実行してください。
>>> arr = np.arange(3000).reshape(100, 30) # 100 rows x 30 columns array
>>> t = Table(arr)
>>> print(t)
col0 col1 col2 col3 col4 col5 col6 ... col23 col24 col25 col26 col27 col28 col29
---- ---- ---- ---- ---- ---- ---- ... ----- ----- ----- ----- ----- ----- -----
0 1 2 3 4 5 6 ... 23 24 25 26 27 28 29
30 31 32 33 34 35 36 ... 53 54 55 56 57 58 59
60 61 62 63 64 65 66 ... 83 84 85 86 87 88 89
90 91 92 93 94 95 96 ... 113 114 115 116 117 118 119
120 121 122 123 124 125 126 ... 143 144 145 146 147 148 149
150 151 152 153 154 155 156 ... 173 174 175 176 177 178 179
180 181 182 183 184 185 186 ... 203 204 205 206 207 208 209
210 211 212 213 214 215 216 ... 233 234 235 236 237 238 239
240 241 242 243 244 245 246 ... 263 264 265 266 267 268 269
270 271 272 273 274 275 276 ... 293 294 295 296 297 298 299
... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
2670 2671 2672 2673 2674 2675 2676 ... 2693 2694 2695 2696 2697 2698 2699
2700 2701 2702 2703 2704 2705 2706 ... 2723 2724 2725 2726 2727 2728 2729
2730 2731 2732 2733 2734 2735 2736 ... 2753 2754 2755 2756 2757 2758 2759
2760 2761 2762 2763 2764 2765 2766 ... 2783 2784 2785 2786 2787 2788 2789
2790 2791 2792 2793 2794 2795 2796 ... 2813 2814 2815 2816 2817 2818 2819
2820 2821 2822 2823 2824 2825 2826 ... 2843 2844 2845 2846 2847 2848 2849
2850 2851 2852 2853 2854 2855 2856 ... 2873 2874 2875 2876 2877 2878 2879
2880 2881 2882 2883 2884 2885 2886 ... 2903 2904 2905 2906 2907 2908 2909
2910 2911 2912 2913 2914 2915 2916 ... 2933 2934 2935 2936 2937 2938 2939
2940 2941 2942 2943 2944 2945 2946 ... 2963 2964 2965 2966 2967 2968 2969
2970 2971 2972 2973 2974 2975 2976 ... 2993 2994 2995 2996 2997 2998 2999
Length = 100 rows
More方法¶
ブラウジングテーブルや列のすべての行をご覧になりますので、ご利用ください more()
または列 more()
方法:研究方法。Linuxのように各行をインタラクティブにスクロールさせることができます more
指揮部。表や列の一部を表示すると,サポートされるナビゲーションキーは:
Pprint()メソッド¶
In order to fully control the print output use the Table
pprint()
or Column
pprint()
methods. These have keyword
arguments max_lines
, max_width
, show_name
, show_unit
with
meanings as shown below:
>>> arr = np.arange(3000, dtype=float).reshape(100, 30)
>>> t = Table(arr)
>>> t['col0'].format = '%e'
>>> t['col1'].format = '%.6f'
>>> t['col0'].unit = 'km**2'
>>> t['col29'].unit = 'kg sec m**-2'
>>> t.pprint(max_lines=8, max_width=40)
col0 ... col29
km2 ... kg sec m**-2
------------ ... ------------
0.000000e+00 ... 29.0
... ... ...
2.940000e+03 ... 2969.0
2.970000e+03 ... 2999.0
Length = 100 rows
>>> t.pprint(max_lines=8, max_width=40, show_unit=True)
col0 ... col29
km2 ... kg sec m**-2
------------ ... ------------
0.000000e+00 ... 29.0
... ... ...
2.940000e+03 ... 2969.0
2.970000e+03 ... 2999.0
Length = 100 rows
>>> t.pprint(max_lines=8, max_width=40, show_name=False)
km2 ... kg sec m**-2
------------ ... ------------
0.000000e+00 ... 29.0
3.000000e+01 ... 59.0
... ... ...
2.940000e+03 ... 2969.0
2.970000e+03 ... 2999.0
Length = 100 rows
出力長や幅を考慮せずにすべての値を強制的に印刷しますので、ご利用ください pprint_all()
設定に相当します max_lines
そして max_width
至る -1
はい。 pprint()
それがそうです。 pprint_all()
取った論拠と pprint()
それがそうです。本例の広いテーブルの場合、以下に示すように、6行の改行出力が見られる。
>>> t.pprint_all(max_lines=8)
col0 col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 col11 col12 col13 col14 col15 col16 col17 col18 col19 col20 col21 col22 col23 col24 col25 col26 col27 col28 col29
km2 kg sec m**-2
------------ ----------- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------------
0.000000e+00 1.000000 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0 13.0 14.0 15.0 16.0 17.0 18.0 19.0 20.0 21.0 22.0 23.0 24.0 25.0 26.0 27.0 28.0 29.0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
2.940000e+03 2941.000000 2942.0 2943.0 2944.0 2945.0 2946.0 2947.0 2948.0 2949.0 2950.0 2951.0 2952.0 2953.0 2954.0 2955.0 2956.0 2957.0 2958.0 2959.0 2960.0 2961.0 2962.0 2963.0 2964.0 2965.0 2966.0 2967.0 2968.0 2969.0
2.970000e+03 2971.000000 2972.0 2973.0 2974.0 2975.0 2976.0 2977.0 2978.0 2979.0 2980.0 2981.0 2982.0 2983.0 2984.0 2985.0 2986.0 2987.0 2988.0 2989.0 2990.0 2991.0 2992.0 2993.0 2994.0 2995.0 2996.0 2997.0 2998.0 2999.0
Length = 100 rows
列に対してその文法や行為は pprint()
すべて同じですが、ありません max_width
キーワードパラメータ::
>>> t['col3'].pprint(max_lines=8)
col3
------
3.0
33.0
...
2943.0
2973.0
Length = 100 rows
列整列方式¶
各列は、閲覧体験を向上させるために、様々な異なる方法で整列することができる:
>>> t1 = Table()
>>> t1['long column name 1'] = [1, 2, 3]
>>> t1['long column name 2'] = [4, 5, 6]
>>> t1['long column name 3'] = [7, 8, 9]
>>> t1['long column name 4'] = [700000, 800000, 900000]
>>> t1['long column name 2'].info.format = '<'
>>> t1['long column name 3'].info.format = '0='
>>> t1['long column name 4'].info.format = '^'
>>> t1.pprint()
long column name 1 long column name 2 long column name 3 long column name 4
------------------ ------------------ ------------------ ------------------
1 4 000000000000000007 700000
2 5 000000000000000008 800000
3 6 000000000000000009 900000
整列は、リストをキーワードパラメータに渡すことによって、別の方法で容易に処理することができる align
**
>>> t1 = Table()
>>> t1['column1'] = [1, 2, 3]
>>> t1['column2'] = [2, 4, 6]
>>> t1.pprint(align=['<', '0='])
column1 column2
------- -------
1 0000002
2 0000004
3 0000006
単一の文字列値を使用してすべての列の整列方法を設定することもできる。
>>> t1.pprint(align='^')
column1 column2
------- -------
1 2
2 4
3 6
整列のための充填文字は、整列文字のプレフィックスに設定することができる(参照 Format Specification Mini-Language より多くの説明については参照)を参照されたい.これは align
パラメータは列の中にあります format
属性です。次の面白いインタラクションに注意してください
>>> t1 = Table([[1.0, 2.0], [1, 2]], names=['column1', 'column2'])
>>> t1['column1'].format = '#^.2f'
>>> t1.pprint()
column1 column2
------- -------
##1.00# 1
##2.00# 2
さて、グローバル整列を設定すると、私たちの元の列フォーマットは失われているようです。
>>> t1.pprint(align='!<')
column1 column2
------- -------
1.00!!! 1!!!!!!
2.00!!! 2!!!!!!
これを避ける方法は,列ごとに整列文字列を明示的に指定し,使用することである. None
列フォーマット:が使用されるべきである:
>>> t1.pprint(align=[None, '!<'])
column1 column2
------- -------
##1.00# 1!!!!!!
##2.00# 2!!!!!!
Pformat()方法¶
フォーマットされた出力を得るために操作やファイルを書き込むために、表を使ってください pformat()
または列 pformat()
方法:研究方法。彼らの行動と pprint()
各フォーマット行に対応するリスト。 pprint()
出力します。♪the pformat_all()
方法は、テーブルの全ての行のリストを返すために使用することができる。
>>> lines = t['col3'].pformat(max_lines=8)
隠れ列¶
♪the Table
クラスは、任意のPrint方法を使用する際に、テーブル内のいくつかの列を選択的に表示または隠蔽する機能を有する。これは,非常に広い列や様々な理由で“つまらない”列に有用である可能性がある.どの列を出力するかの仕様が表自体に関連付けられており,スライス,複製,直列化(たとえばECSVに保存)することで永続的に保存することができる.1つの用例は,通常ユーザにとって役に立たないサブ列を含む専用の表サブクラスである.
2つの相補的な2つの列で印刷を処理する際にどの列を含むかを指定する Table
属性:
pprint_include_names
:含まれる列名,デフォルト値はNone
表示はすべての列を含む.pprint_exclude_names
:除外する列名,デフォルト値はNone
いかなる列も排除しないことを示す.
一般的に、あなたは一度にこの二つの属性のうちの一つだけを使用しなければならない。しかし、これら2つの列を同時に設定することができ、実際に印刷された列セットは、概念的には以下の擬似コードで表される。
include_names = (set(table.pprint_include_names() or table.colnames)
- set(table.pprint_exclude_names() or ())
実例.¶
1行と6列を持つ簡単な表を定義することから始めましょう
>>> from astropy.table.table_helpers import simple_table
>>> t = simple_table(size=1, cols=6)
>>> print(t)
a b c d e f
--- --- --- --- --- ---
1 1.0 c 4 4.0 f
今は手に入れることができます pprint_include_names
属性には、印刷のための名前がいくつか含まれています:
>>> print(t.pprint_include_names())
None
>>> t.pprint_include_names = ('a', 'c', 'e')
>>> print(t.pprint_include_names())
('a', 'c', 'e')
>>> print(t)
a c e
--- --- ---
1 c 4.0
今、印刷からいくつかの列を除外することができます。INCLUDEとEXCLUDEについては、表に存在しない列名を追加することができますのでご注意ください。これは完全な構造表の前に所定の属性を可能にする。**
>>> t.pprint_include_names = None # Revert to printing all columns
>>> t.pprint_exclude_names = ('a', 'c', 'e', 'does-not-exist')
>>> print(t)
b d f
--- --- ---
1.0 4 f
次は、どうぞ add
あるいは…。 remove
属性中の名前:
>>> t = simple_table(size=1, cols=6) # Start with a fresh table
>>> t.pprint_exclude_names.add('b') # Single name
>>> t.pprint_exclude_names.add(['d', 'f']) # List or tuple of names
>>> t.pprint_exclude_names.remove('f') # Single name or list/tuple of names
>>> t.pprint_exclude_names()
('b', 'd')
最後に、コンテキストマネージャに属性を一時的に設定することができます。例えば:
>>> t = simple_table(size=1, cols=6)
>>> t.pprint_include_names = ('a', 'b')
>>> print(t)
a b
--- ---
1 1.0
>>> # Show all (for pprint_include_names the value of None => all columns)
>>> with t.pprint_include_names.set(None):
... print(t)
a b c d e f
--- --- --- --- --- ---
1 1.0 c 4 4.0 f
これらの属性の名前仕様は、UnixスタイルのGLOBを含むことができる *
そして ?
それがそうです。見 fnmatch
詳細な情報(特にこれらの文字をどのように変換するか)を取得する.例えば:
>>> t = Table()
>>> t.pprint_exclude_names = ['boring*']
>>> t['a'] = [1]
>>> t['b'] = ['b']
>>> t['boring_ra'] = [122.0]
>>> t['boring_dec'] = [89.9]
>>> print(t)
a b
--- ---
1 b
多次元列.¶
列に複数の次元がある場合、その列の各要素自体が配列である。以下の例では、3行あり、各行は1つである 2 x 2
配列していますこのような列のフォーマット出力は、各行要素の最初の値および最後の値のみを表示し、列名タイトルに配列次元を示す:
>>> from astropy.table import Table, Column
>>> import numpy as np
>>> t = Table()
>>> arr = [ np.array([[ 1, 2],
... [10, 20]]),
... np.array([[ 3, 4],
... [30, 40]]),
... np.array([[ 5, 6],
... [50, 60]]) ]
>>> t['a'] = arr
>>> t['a'].shape
(3, 2, 2)
>>> t.pprint()
a [2,2]
-------
1 .. 20
3 .. 40
5 .. 60
多次元列のすべてのデータ値を見るには、列表現法を使ってください。この使用基準は numpy
任意のアレイを印刷する機構:
>>> t['a'].data
array([[[ 1, 2],
[10, 20]],
[[ 3, 4],
[30, 40]],
[[ 5, 6],
[50, 60]]])
単位付き柱¶
A Column
単位が標準範囲内の対象 Table
(と) QTable
)は、数に関連するいくつかの便利さを有する。まず明示的に変換することができます Quantity
対象通過 quantity
属性と to()
方法:
>>> data = [[1., 2., 3.], [40000., 50000., 60000.]]
>>> t = Table(data, names=('a', 'b'))
>>> t['a'].unit = u.m
>>> t['b'].unit = 'km/s'
>>> t['a'].quantity
<Quantity [1., 2., 3.] m>
>>> t['b'].to(u.kpc/u.Myr)
<Quantity [40.9084866 , 51.13560825, 61.3627299 ] kpc / Myr>
注意してください。 quantity
属性は実際には view 列中のデータのコピーは、コピーではありません。そのため、現地で変更することができます quantity
物件::
>>> t['b']
<Column name='b' dtype='float64' unit='km / s' length=3>
40000.0
50000.0
60000.0
>>> t['b'].quantity[0] = 45000000*u.m/u.s
>>> t['b']
<Column name='b' dtype='float64' unit='km / s' length=3>
45000.0
50000.0
60000.0
明示的な変換がなくても,単位を持つ列を見なすことができる. astropy
Quantity
はい。 some 算術式(この問題に関する警告は、以下の警告を参照):
>>> t['a'] + .005*u.km
<Quantity [6., 7., 8.] m>
>>> from astropy.constants import c
>>> (t['b'] / c).decompose()
<Quantity [0.15010384, 0.16678205, 0.20013846]>
警告
表列はいいです not いつも同じように表現されています Quantity
それがそうです。表列の行為は通常の列のようなものです numpy
配列は明示的に変換されない限り Quantity
あるいはそれと Quantity
算術演算子を用いる。例えば、以下の動作方式は、あなたが予想しているものとは異なる。
>>> import numpy as np
>>> from astropy.table import Table
>>> data = [[30, 90]]
>>> t = Table(data, names=('angle',))
>>> t['angle'].unit = 'deg'
>>> np.sin(t['angle'])
<Column name='angle' dtype='float64' unit='deg' length=2>
-0.988031624093
0.893996663601
これは間違っています単位は度だと言っているので and sin
度数ではなく値と弧を扱っている。正しい結果が得られるかどうか疑問があれば、一番安全な選択は使用です QTable
明示的に Quantity
**
>>> np.sin(t['angle'].quantity)
<Quantity [0.5, 1. ]>
バイト列.¶
バイト列を使う (numpy
'S'
Dtype)は可能です astropy
表は自然なPython文字列と比較できるからです (str
)タイプ。参照してください The bytes/str dichotomy in Python 3 異なる点を非常に簡単に要約することで。
文字列を表す標準的な方法 numpy
Unicodeで 'U'
データタイプです。問題は,1文字あたり4バイト必要であり,メモリに非常に多くの文字列があれば,メモリを埋めて性能に影響を与える可能性があることである.非常に一般的な例は、これらの文字列が実際にASCIIであり、各文字を1バイトで表すことができることである。はい。 astropy
中のバイト列データを直接,容易に使用することができる Table
そして Column
運営部。
なお、HDF 5ファイルを処理する際には、バイト列の問題が特別な問題であり、HDF 5ファイルでは、文字データがバイト列として読み出される。 ('S'
Dtype)が使用している 統一ファイル読み書きインタフェース それがそうです。HDF 5ファイルは非常に大きなデータセットを格納するためによく用いられるため,変換と 'U'
データタイプは受け入れられません。
実例.¶
以下の例では、バイト文字列データをどのように処理するかについて説明する astropy
それがそうです。
>>> t = Table([['abc', 'def']], names=['a'], dtype=['S'])
>>> t['a'] == 'abc' # Gives expected answer
array([ True, False], dtype=bool)
>>> t['a'] == b'abc' # Still gives expected answer
array([ True, False], dtype=bool)
>>> t['a'][0] == 'abc' # Expected answer
True
>>> t['a'][0] == b'abc' # Cannot compare to bytestring
False
>>> t['a'][0] = 'bä'
>>> t
<Table length=2>
a
bytes3
------
bä
def
>>> t['a'] == 'bä'
array([ True, False], dtype=bool)
>>> # Round trip unicode strings through HDF5
>>> t.write('test.hdf5', format='hdf5', path='data', overwrite=True)
>>> t2 = Table.read('test.hdf5', format='hdf5', path='data')
>>> t2
<Table length=2>
col0
bytes3
------
bä
def