代码之家  ›  专栏  ›  技术社区  ›  npross

转换astropy。桌子列到numpy数组

  •  2
  • npross  · 技术社区  · 7 年前

    我想策划 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 回复  |  直到 7 年前
        1
  •  5
  •   Tom Aldcroft    7 年前

    astropy表列对象可以使用 data 属性:

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

    as_array() 表格法(例如。 data.as_array() 在您的示例中)。

    Column 但是你的numpy数组创建声明。它可能是:

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

    这适用于

        2
  •  0
  •   ImportanceOfBeingErnest    7 年前

    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']])
    
        3
  •  0
  •   eteq    7 年前

    但是,请记住,如果你实际上想要绘制点,那么你不需要 转换为数组。以下方法可以很好地工作:

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

    无需对数组进行任何转换。