Python:将Astropy表转换为用于打印的数组(使用Numpy?)(在matplotlib上)

Python:将Astropy表转换为用于打印的数组(使用Numpy?)(在matplotlib上),python,numpy,matplotlib,astropy,Python,Numpy,Matplotlib,Astropy,我有一张类似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) 这就是我得到的(我相信是一个元组): 当我问'np

我有一张类似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)
这就是我得到的(我相信是一个元组):

当我问'np.shape(x)'时,我得到了(3),这就是为什么我认为它是一个元组。我需要的形状是(3,3),这样我就可以调用个别元素并绘制这些信息

谢谢,Q

这是一个numpy,其中数组的“元素”不是单个浮点值,而是浮点的三元组(在本例中)。这样做的部分原因是,在所有列都不是相同的数据类型的一般情况下,数据的原始格式仍然保留(3列和3(可能)异构行)。这就是为什么形状是
(3,)

在这种情况下,您可以安全地转换为
(3,3)
同构数组,因为所有列都具有浮点数据类型。有几种不同的方法可以做到这一点,但最简单和最安全的方法之一是实用功能

更新:现在我在电脑前,这里有一个基于您的具体示例:

>>> 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)
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\u width\u two\u line') >>>t a、b、c 浮动64浮动64浮动64浮动 ------------------- ------- ------- -0.6096212422044334 2.0 3.0 -1.2192424844088667 10.0 3.0 -5.4865911798399 9.0 3.0 >>>t.as_数组() 数组([(-0.60962124,2,3.),(-1.21924248,10,3.), (-5.48659118, 9., 3.)],
dtype=[('a','这是一个csv文件吗?如果它是一个简单的csv文件,你可以将它作为数据框上传到python中,然后绘制各个列。为什么需要
Table
命令?这最初是一个.txt文件。我使用Astropy将其转换为一个表,以便根据特定条件编辑某些内容,如添加/删除行(例如,如果第2列的值小于10,则删除行)。我需要使用Table函数,以便进行这些更改。也许我可以将更新后的表作为一个新的.txt文件上载,然后将其作为数组带回Python?
>>> 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)