Python:将Astropy表转换为用于打印的数组(使用Numpy?)(在matplotlib上)
我有一张类似Astropy的桌子: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
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)