将astropy.table.columns转换为numpy数组

时间:2017-09-19 10:51:49

标签: python arrays numpy types

我想绘制points

points = np.random.multivariate_normal(mean=(0,0), cov=[[0.4,9],[9,10]],size=int(1e4))

print(points)
  [[-2.50584156  2.77190372]
   [ 2.68192136 -3.83203819]
   ..., 
   [-1.10738221 -1.72058301]
   [ 3.75168017  5.6905342 ]]

print(type(points))
  <class 'numpy.ndarray'>

data = ascii.read(datafile)  
type(data['ra'])
  astropy.table.column.Column
type(data['dec'])
 astropy.table.column.Column

然后我尝试:

points = np.array([data['ra']], [data['dec']])

并获得

TypeError: data type not understood

思想?

3 个答案:

答案 0 :(得分:2)

使用data属性可以将astropy Table Column对象转换为numpy数组:

In [7]: c = Column([1, 2, 3])

In [8]: c.data
Out[8]: array([1, 2, 3])

您还可以使用as_array()表格方法将整个表格转换为numpy结构化数组(例如,在您的示例中为data.as_array())。

BTW我认为实际问题不是关于astropy Column而是你的numpy数组创建语句。应该是:

arr = np.array([data['ra'], data['dec']])

这适用于Column个对象。

答案 1 :(得分:0)

numpy.array的签名是numpy.array(object, dtype=None,)

因此,在调用np.array([data['ra']], [data['dec']])时,[data['ra']]是要转换为numpy数组的对象,[data['dec']]是数据类型,不理解(如错误所示)。

这个问题实际上并不清楚你想要实现的目标 - 可能是像

这样的东西
points = np.array([data['ra'], data['dec']])

答案 2 :(得分:0)

但请记住,如果您想要的是绘制点,那么 需要转换为数组。以下内容可以正常使用:

from matplotlib import pyplot as plt
plt.scatter(data['ra'], data['dec'])

无需转换为数组。