【问题标题】:Astropy: remove lines containing a nanAstropy:删除包含 nan 的行
【发布时间】:2020-04-02 22:54:09
【问题描述】:

我正在使用 astropy 来操作 FITS 表,我想删除所有包含 nan 的行。

使用存储在mytable 中的拟合表,我尝试了以下操作

data = np.lib.recfunctions.structured_to_unstructured(np.array(mytable))
idx = []
for i, line in enumerate(data):
    for e in line:
        if e !=e:
            idx.append(i)
data = Table([data[i] for i in range(len(data)) if i not in idx])

这似乎有效,但相当笨重。有没有更 Pythonic 的方式来做到这一点?


如果该行中的元素之一是nan,我想删除整行。 This question 不同,因为它是关于删除单个元素。

【问题讨论】:

    标签: python-3.x astropy


    【解决方案1】:

    一个更 num-pythonic 的方法是:

    data = np.lib.recfunctions.structured_to_unstructured(np.array(mytable))
    has_nan = np.any(np.isnan(data), axis=1)
    mytable_no_nan = mytable[~has_nan]
    

    对于更通用和 astro-pythonic 的方式(假设 mytable 是 astropy Table):

    has_nan = np.zeros(len(mytable), dtype=bool)
    for col in mytable.itercols():
        if col.info.dtype.kind == 'f':
            has_nan |= np.isnan(col)
    mytable_no_nan = mytable[~has_nan]
    

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      • 2016-12-04
      • 1970-01-01
      • 2021-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多