我需要读取大约5000个数据集,每个数据集有多个值。从那以后,我需要设置被认为是“良好价值”的条件。我想我已经做到了这一点,从这个新的总体样本子集中,我需要随机选择5个数据集,并绘制它们的波长与通量
我曾尝试使用for循环读取随机选择的数据集的“id”,但它总是返回相同的数字。每个数据集都有三个条件值,如for gal in allgal循环所示,该循环选择具有良好数据点的星系
import random
import numpy as np
from numpy.polynomial.polynomial import polyfit
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
import csv
import math
from collections import Counter
galnum = []
goodgal = []
xval = [3650, 4450, 5510, 6580, 8060, 9000, 12200, 21900]
yval = []
class Galaxy:
def __init__(self, id , ra , dec , x , y , hawkiks_tot , k_flag , k_star , k_fluxrad , totmask , hawkiks , ehawkiks , vimosu , evimosu , vimosb , \
evimosb , vimosv , evimosv , vimosr , evimosr , vimosi , evimosi , decamz , edecamz , fourstarj1 , efourstarj1 , hawkij , ehawkij , \
irac1 , eirac1 , irac2, eirac2 , irac3 , eirac3 , irac4 , eirac4):
self.id = int(id)
self.hawkiks_tot = float(hawkiks_tot)
self.k_flag = int(k_flag)
self.totmask = int(totmask)
self.hawkiks = float(hawkiks)
self.vimosu = float(vimosu)
self.vimosb = float(vimosb)
self.vimosv = float(vimosv)
self.vimosr = float(vimosr)
self.vimosi = float(vimosi)
self.decamz = float(decamz)
self.hawkij = float(hawkij)
def __str__(self):
return id + ' ' + hawkiks_tot + ' ' + k_flag + ' ' + totmask + ' ' + hawkiks + ' ' + vimosu + ' ' + vimosb + ' ' \
+ vimosv + ' ' + vimosr + ' ' + vimosi + ' ' + decamz + ' ' + hawkij
allgal = []
with open('/home/jacob/PHOTOMETRY/PHOTOM_CATS/SpARCS-0035_totalall_HAWKIKs.cat', 'r') as magfile:
magplots = csv.reader(magfile)
firstmagline = magfile.readline()
for line in magfile:
id , ra , dec , x , y , hawkiks_tot , k_flag , k_star , k_fluxrad , totmask , hawkiks , ehawkiks , vimosu , evimosu , vimosb , \
evimosb , vimosv , evimosv , vimosr , evimosr , vimosi , evimosi , decamz , edecamz , fourstarj1 , efourstarj1 , hawkij , ehawkij , \
irac1 , eirac1 , irac2, eirac2 , irac3 , eirac3 , irac4 , eirac4 = line.split()
gal = Galaxy(id , ra , dec , x , y , hawkiks_tot , k_flag , k_star , k_fluxrad , totmask , hawkiks , ehawkiks , vimosu , evimosu , vimosb , \
evimosb , vimosv , evimosv , vimosr , evimosr , vimosi , evimosi , decamz , edecamz , fourstarj1 , efourstarj1 , hawkij , ehawkij , \
irac1 , eirac1 , irac2, eirac2 , irac3 , eirac3 , irac4 , eirac4)
allgal.append(gal)
for gal in allgal:
if gal.k_flag == 0 and gal.totmask == 0 and -2.5*math.log10(gal.hawkiks_tot) + 25 < 23:
goodgal.append(gal)
random.seed(21)
sample_list = random.sample(goodgal, k=5)
print(sample_list) #IDs: 2279, 3914, 3016, 4310, 2638
for goodgal in sample_list:
print(id)
最后一个for循环只是确保for循环输出的id与随机数生成器的id匹配,如代码中的注释行所示。但它总是打印出4889,这是最后一个数据集ID号。我不明白为什么会出现这种情况,因为random.sample()中指定星系的ID甚至没有这个ID。它一直打印出48894889488948894889。虽然它应该打印出“227939141301643102638”。这只是一个检查,以确保所有内容都被正确阅读。我想做的基本上是读出不同的通量(由hawkiks、vimosv、vimosb等给出),将它们附加到yval数组中,然后根据波长(xval数组)和通量(yval数组)为每个星系(数据集)绘制5个单独的图
目前没有回答
相关问题 更多 >
编程相关推荐