我有两个要构建到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}”我觉得我可能会以一种奇怪的方式来做。
答案 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数组,因此如果您已经有两个表c1
和c2
,则可以这样做:
>>> 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
在每个表c1
和c2
中选择相关的行,然后将两个表(现在具有相同的行数)联接起来。参见Astropy Table docs。