使用一系列索引来构建Astropy表

时间:2019-02-04 04:24:37

标签: python-3.x datatable astropy

我有两个要构建到Astropy表中的目录,但似乎无法正常工作。两个数组的长度都不同,我还有第三个数组,其中包含建立表所需的索引。这两个目录如下:

c1['x'] = [11.7, 13.8, 19.2, 15.0]
c2['x'] = [12.0, 13.6, 14.5]
idx = [0, 2]

我需要创建一个仅包含两个目录中第一和第三条目的表。我尝试过:

from astropy.table import Table
t = Table([idx, c1, cat2], names=('idx', 'x', 'x'))   
t

这给了我一个错误:“数据列长度不一致:{4,3}”我觉得我可能会以一种奇怪的方式来做。

1 个答案:

答案 0 :(得分:1)

使用Numpy数组代替Python列表表示数据,并在创建idx之前应用行选择索引Table

>>> import numpy as np
>>> from astropy.table import Table
>>> c1x = np.array([11.7, 13.8, 19.2, 15.0])
>>> c2x = np.array([12.0, 13.6, 14.5])
>>> idx = np.array([0, 2])
>>> c1x[idx]
array([11.7, 19.2])
>>> c2x[idx]
array([12. , 14.5])
>>> table = Table()
>>> table['c1x'] = c1x[idx]
>>> table['c2x'] = c2x[idx]
>>> table
<Table length=2>
  c1x     c2x  
float64 float64
------- -------
   11.7    12.0
   19.2    14.5

Astropy Table在内部将数据存储为Numpy数组,因此如果您已经有两个表c1c2,则可以这样做:

>>> c1 = Table()
>>> c1['x'] = [11.7, 13.8, 19.2, 15.0]
>>> c2 = Table()
>>> c2['x'] = [12.0, 13.6, 14.5]
>>> idx = [0, 2]
>>> t = Table()
>>> t['c1x'] = c1['x'][idx]
>>> t['c2x'] = c2['x'][idx]
>>> t
<Table length=2>
  c1x     c2x  
float64 float64
------- -------
   11.7    12.0
   19.2    14.5

创建表,从表中选择行和列,或将两个表中的数据合并到新表中的方法有很多。例如。在您的情况下,您可能希望应用idx在每个表c1c2中选择相关的行,然后将两个表(现在具有相同的行数)联接起来。参见Astropy Table docs