Условный выбор значений из массива Numpy, возвращаемого из PyFITS

Я открыл файл FITS в pyfits. Файл HEADER читает XTENSION='BINTABLE' с DIMENSION= 52989R x 36C с 36 тегами столбцов, такими как 'ZBEST', 'ZQUALITY', 'M_B', 'UB', 'PGAL' и т. д.

Теперь мне нужно выбрать объекты из данных с «ZQUALITY» больше 2 и «PGAL» равно 3. Затем я должен построить гистограмму для «ZBEST» соответствующих объектов, удовлетворяющих вышеуказанным условиям. Также я должен построить график «M_B» и «UB» для этих объектов.

Наконец, я хочу разделить «ZBEST» на три среза (zbest ‹ 0,5), (0,5 ‹ zbest ‹ 1,0), (zbest> 1,0) и хочу построить гистограмму и диаграмму «M_B» против «UB» отдельно.

Я застрял в выборе данных, подчиняющихся двум условиям. Может ли кто-нибудь сказать мне, как я могу выбрать объекты из данных, удовлетворяющих обоим условиям («ZQUALITY»> 2 и «PGAL» == 3)? Я использую как: data.field[('zquality' > 2) & ('pgal'==3)] но это не работает.


person Chicku    schedule 23.04.2014    source источник


Ответы (1)


Выражение data.field[('zquality' > 2) & ('pgal'==3)] запрашивает поля, в которых строка 'zquality' больше 2 (всегда верно) и где строка 'pgal' равна 3 (также всегда ложно).

На самом деле, скорее всего, вы получаете исключение, потому что data.field — это метод для объектов Numpy recarray, в которых PyFITS возвращает таблицы.

Вы хотите что-то вроде data[(data['zquality'] > 2) & (data['pgal'] == 3)].

Это выражение означает «дайте мне строки столбца «zquality» data, содержащие значения больше 2. Затем дайте мне строки столбца «pgal» data со значениями, равными трем. Теперь дайте мне полные строки data выбранных из логического «и» двух масок строк.

person Iguananaut    schedule 23.04.2014