Астропия: удалить линии, содержащие нан - PullRequest
1 голос
/ 02 апреля 2020

Я использую астропию для манипулирования таблицей 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])

, которое, кажется, работает, но довольно неуклюже. Есть ли еще способ Pythoni c, чтобы сделать это?


Я хочу удалить всю строку, если один из элементов в этой строке является nan. Этот вопрос отличается, поскольку он касается удаления отдельных элементов.

1 Ответ

2 голосов
/ 02 апреля 2020

Более num-pythoni c способ сделать это будет:

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]

Для более общего и астро-pythoni c способа (при условии, что mytable является астропией 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...