Мне нужно прочитать около 5000 наборов данных с несколькими значениями для каждого набора.Оттуда мне нужно установить условия на то, что считается «хорошей ценностью».Я думаю, что я достиг этого, и из этой новой выборки подмножества из всей совокупности мне нужно случайным образом выбрать 5 наборов данных и построить их график зависимости длины волны от потока.
Я попытался использовать цикл for для считывания 'идентификаторы случайно выбранных наборов данных, но они всегда возвращаются с одним и тем же номером.Каждый из наборов данных имеет три условных значения, как показано в цикле 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 просто проверяет, что id распечатывается с помощьюцикл for соответствует идентификаторам генератора случайных чисел, как показано в строке комментария в коде.Но он всегда печатает 4889, который является последним идентификатором набора данных.Я не понимаю, почему это появляется, потому что идентификаторы назначенных галактик в random.sample () даже не имеют этого идентификатора.Он продолжает печатать 4889, 4889, 4889, 4889, 4889. В то время как он должен печатать, «2279, 3914, 3016, 4310, 2638».Это просто проверка, чтобы убедиться, что все читается правильно.То, что я хочу сделать, это в основном считывать различные потоки (заданные hawkiks, vimosv, vimosb и т. Д.), Добавлять их в массив yval и затем строить 5 отдельных графиков для каждой галактики (набор данных) с точки зрения длины волны (xvalмассив) и поток (массив yval).