【问题标题】:Converting astropy.table.columns to a numpy array将 astropy.table.columns 转换为 numpy 数组
【发布时间】:2018-02-28 03:03:53
【问题描述】:

我想绘制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

想法?

【问题讨论】:

    标签: python arrays numpy types


    【解决方案1】:

    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']])
    

    【讨论】:

    • 我正在尝试将当前是 astropy 表的 data['ra'] 和 data['dec'] 放入一个 numpy 数组中,格式为:: [ [data['ra '][0], 数据['dec'][0] ... [data['ra'][n], 数据['dec'][n]]
    • 由于我没有安装astropy,我无法尝试任何东西。上面的工作没有错误吗?它的输出是什么?
    【解决方案2】:

    但请记住,如果您真正想要的是绘制点,则您不需要 将其转换为数组。以下将正常工作:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      顺便说一句,我认为实际问题不在于 astropy Column,而是您的 numpy 数组创建语句。应该是:

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

      这适用于Column 对象。

      【讨论】:

      • 虽然接受的答案有效,但这实际上是更优雅的方式。
      猜你喜欢
      • 1970-01-01
      • 2021-12-29
      • 2017-03-08
      • 2012-04-18
      • 2017-12-15
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多