Numpy的条件

时间:2016-03-10 14:38:20

标签: python numpy astropy

我有一个小问题。我找不到得到我想要的东西的方法。 我有一个阵列。我创建变量" Tri_1"为了只得到符合我条件的行。

但我想从其他列中获取考虑前一个条件的行,以便在x中绘制图形(g0-r0),在y中绘制g0。所以只需在列中获取行' g0' Tri_1的工作地点。

Tri_1 = tbdata[((tbdata['g0-r0']) < 0.8) & (-0.4 < (tbdata['g0-r0']))]  # Ne garder que les -0.4 < (g-r)0 < 0.8

print tbdata[(tbdata['g0'], Tri_1)] 

我不知道如何做到这一点..

我的输入文件如下:

ID          RA        DEC     NDET DEPTHFLAG SEPINDX [65] SEPFINDX [65]   U   UERR    G       GERR      R       RERR      I       IERR       Z       ZERR      CHI      SHARP   FLAG PROB    EBV   g0   r0   i0   z0   X   Y   g0-r0
------------- ---------- ---------- ---- --------- ------------ ------------- ----- ---- ------- --------- ------- --------- ------- ---------- ------- ---------- -------- --------- ---- ---- --------- ------- ------- ------- ------- ------- ------- -------- --------
Field169.1255 184.766833 -30.472462   17         3   1254 .. -1    1254 .. -1 99.99 9.99 21.4875 0.0100426 20.0497 0.0070361 18.9002 0.00376412 18.4352 0.00425852 0.911594 -0.212171   -1 0.87 0.0709362 21.257831573486328, 19.895366668701172, 18.787057876586914, 18.348880767822266, -0.23369831258206375, 0.98211750000000109, 1.3624649047851562

原因是我想在(g0-r0)的函数中绘制g0。但是,如果我做:

fig2 = plt.figure(2)
plt.plot(Tri_1, tbdata['g0'], '.')
plt.title('Diagramme Couleur-Magnitude étoiles bleues')
plt.xlabel('(g0-r0)')
plt.ylabel('g0')
plt.xlim(-1.5,2.5)
plt.ylim(14,28)
plt.gca().invert_yaxis()
plt.show()

它不起作用,因为x和y的尺寸不同。所以我只想要&#39; g0&#39;对应于&#39; g0-r0&#39;

谢谢!

更新:

这是我现在所发现的:

#!/usr/bin/python
# coding: utf-8

from astropy.io import fits
from astropy.table import Table
from astropy.table import Column
import numpy as np
import matplotlib.pyplot as plt


    ###################################
    # Importation du fichier de champ #
    ###################################

filename = '/home/valentin/Desktop/Field169_combined_final_roughcal.fits_traite_traiteXY_traiteXY_final'

print 'Fichier en cours de traitement' + str(filename) + '\n'

# Ouverture du fichier à l'aide d'astropy
field = fits.open(filename)        

# Lecture des données fits 
tbdata = field[1].data            


    #######################################
    # Paramètres pour la carte de densité #
    #######################################

# Boite des étoiles bleues :
Blue_stars_X = tbdata[np.bitwise_and(tbdata['g0-r0'] > -0.5, tbdata['g0-r0'] < 0.8 )] # Ne garder que les -0.4 < (g-r)0 < 0.8
Blue_stars_Y = Blue_stars = Blue_stars_X[Blue_stars_X['g0'] < 23.5]

RA_Blue_stars = ?? # get values RA from previous conditions
DEC_Blue_stars = ?? # get values DEC from previous conditions

# Boite des étoiles très bleues :
Very_Blue_stars_X = tbdata[np.bitwise_and(tbdata['g0-r0'] > -0.5, tbdata['g0-r0'] < 0.2 )]
Very_Blue_stars_Y = Very_Blue_stars = Very_Blue_stars_X[Very_Blue_stars_X['g0'] < 23.5]



    #####################################
    # Traçage des différents graphiques #
    #####################################


fig1 = plt.figure(1)
plt.plot(tbdata['g0-r0'], tbdata['g0'], 'r.', label=u'Etoiles du champ')
plt.plot(Blue_stars['g0-r0'], Blue_stars['g0'], 'b.', label =u'Etoiles bleues')
plt.plot(Very_Blue_stars['g0-r0'], Very_Blue_stars['g0'], 'k.', label =u'Etoiles très bleues')
plt.title('Diagramme Couleur-Magnitude')
plt.xlabel('(g0-r0)')
plt.ylabel('g0')
plt.xlim(-1.5,2.5)
plt.ylim(14,28)
plt.legend(loc='upper left')
plt.gca().invert_yaxis()

plt.show()
#fig.savefig('CMD.png')

print "Création du Diagramme"

1 个答案:

答案 0 :(得分:0)

如果您只想包含满足条件的元素,请说:

condition = (tbdata['g0-r0']) < 0.8) & (-0.4 < (tbdata['g0-r0'])

然后您需要在两个轴上使用条件,以便仅组合同一条目的元素。

x_data = tbdata[condition]['g0-r0']
y_data = tbdata[condition]['g0']
plt.plot(x_data, y_data, '.')

或根据您的情况,您只需要更改plot行:

plt.plot(Tri_1['g0-r0'], Tri_1['g0'], '.')

对于您的情况:

# Setup the condition:
condition1 = np.bitwise_and(tbdata['g0-r0'] > -0.5, tbdata['g0-r0'] < 0.8 )
# Combine it with the g0 condition
condition_final = np.bitwise_and(Blue_stars_X['g0'] < 23.5, condition1)
# Get all rows where the condition is true:
Blue_stars = tbdata[condition_final]

RA_Blue_stars = Blue_stars['RA']
DEC_Blue_stars = Blue_stars['DEC']

为了保持清洁,我现在不关心蓝调,只需使用类似于上面的东西。

然后绘制它:

fig1 = plt.figure(1)
plt.plot(tbdata['g0-r0'], tbdata['g0'], 'r.', label=u'Etoiles du champ')
plt.plot(Blue_stars['g0-r0'], Blue_stars['g0'], 'b.', label =u'Etoiles bleues')
plt.title('Diagramme Couleur-Magnitude')
plt.xlabel('(g0-r0)')
plt.ylabel('g0')
plt.xlim(-1.5,2.5)
plt.ylim(14,28)
plt.legend(loc='upper left')
plt.gca().invert_yaxis()

plt.show()
#fig.savefig('CMD.png')