Астропия: перебор столбцов в таблице с определенным шаблоном в имени столбца - PullRequest
0 голосов
/ 31 января 2020

У меня есть таблица астропии t такая, что t.colnames показывает что-то вроде:

['a', 'b', 'c', 'err_a', 'err_b', 'err_c', 'd', 'e', 'f']

Я хотел бы определить для каждой строки в таблице максимальное значение для столбцов, которые имеют 'err' во имя.

Я могу сделать что-то вроде

for line in t:
    max = 0
    for col in t.colnames:
        if col[:3] == 'err':
            if line[col] > max:
                max = line[col]
    print(max)

Есть ли более простой способ сделать это?

1 Ответ

2 голосов
/ 31 января 2020

Предполагая, что вы хотите получить максимальное значение для всех столбцов "err", вы можете сделать это:

max(t[c].max() for c in t.colnames if 'err' in c)

Для максимального количества строк это немного сложнее, поскольку данные в таблицах Astropy обычно являются столбцами- ориентированный. Вероятно, проще всего преобразовать соответствующие столбцы в массив Numpy и передать функцию max по оси строк; это немного сложнее, потому что вам нужно преобразовать массив из смешанного типа в один тип (при условии, что все столбцы "err" имеют одинаковый тип d, скажем, float64):

err_cols = [c for c in t.colnames if 'err' in c]
t.as_array(names=err_cols).view(dtype=float).reshape((len(t), len(err_cols))).max(axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...