Python:将Astropy表格转换为数组(使用Numpy?)以进行绘图(在matplotlib上)

3

我有一个 Astropy 表格,如下所示:

         a           b    c 
------------------- ---- ---
-0.6096212422044334  2.0 3.0
-1.2192424844088667 10.0 3.0
   -5.4865911798399  9.0 3.0

我想把这个表格转换成一个数组,以便于绘图。这是我尝试的方法:

d=Table(t)
x=np.array(d)
print(x)

这是我得到的返回内容(我相信这是一个元组):
[(-0.60962124,  2., 3.) (-1.21924248, 10., 3.) (-5.48659118,  9., 3.)]

当我请求 'np.shape(x)' 时,我得到的是 (3,),这就是我认为它是元组的原因。我需要形状为 (3,3),这样我才能调用单个元素并绘制此信息。
谢谢,Q

这是一个CSV文件吗?如果是一个简单的CSV文件,你可以将它作为数据框上传到Python中,然后绘制各个列。为什么需要使用Table命令呢? - undefined
这原本是一个 .txt 文件。我使用 Astropy 将其转换为表格,以便可以根据特定条件(例如,如果第二列的值小于10,则删除行)编辑某些内容,我需要使用 Table 函数来进行这些更改。也许我可以将更新后的表格作为新的 .txt 文件上传,然后将其作为数组重新导入到 Python 中? - undefined
1个回答

2
这是一个numpy结构化数组,其中数组的“元素”不是单个浮点值,而是一组浮点数(在本例中为三元组)。它之所以这样做部分原因是因为在所有列不是相同数据类型的一般情况下,仍然保留了数据的原始格式(3列和3行可能是异构的)。这就是形状为(3,)的原因。
在这种情况下,您可以安全地转换为(3, 3)的同质数组,因为所有列都具有浮点数据类型。有几种不同的方法可以做到这一点,但其中最简单且最安全的方法是使用structured_to_unstructured实用程序函数。
更新:现在我已经在我的计算机上,这里有一个基于您的具体示例的例子:
>>> f = io.BytesIO(b"""\ 
...          a           b    c  
... ------------------- ---- --- 
... -0.6096212422044334  2.0 3.0 
... -1.2192424844088667 10.0 3.0 
...    -5.4865911798399  9.0 3.0 
... """)                                                                                       
>>> t = Table.read(f, format='ascii.fixed_width_two_line')                                     
>>> t                                                                                          
<Table length=3>
         a             b       c   
      float64       float64 float64
------------------- ------- -------
-0.6096212422044334     2.0     3.0
-1.2192424844088667    10.0     3.0
   -5.4865911798399     9.0     3.0
>>> t.as_array()                                                                               
array([(-0.60962124,  2., 3.), (-1.21924248, 10., 3.),
       (-5.48659118,  9., 3.)],
      dtype=[('a', '<f8'), ('b', '<f8'), ('c', '<f8')])
>>> a = np.lib.recfunctions.structured_to_unstructured(t.as_array())                           
>>> a                                                                                          
array([[-0.60962124,  2.        ,  3.        ],
       [-1.21924248, 10.        ,  3.        ],
       [-5.48659118,  9.        ,  3.        ]])
>>> a.shape                                                                                    
(3, 3)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接