Итак, я пытаюсь выбрать пять случайных элементов из таблицы ascii (из предоставленного файла) и использую функцию numpy.where (), чтобы установить из таблицы критерии того, какие элементы следует учитывать. Я хочу, чтобы мой код просто печатал идентификаторы, прикрепленные к пяти случайно выбранным элементам, но я продолжаю получать:
<ipython-input-22-0c49b44ffb14> in <module>
89
90 random.seed(21)
---> 91 sample_list = random.sample(photdat['id'][izspec], k=5)
92 print(sample_list)
~/anaconda3/lib/python3.7/random.py in sample(self, population, k)
315 population = tuple(population)
316 if not isinstance(population, _Sequence):
--> 317 raise TypeError("Population must be a sequence or set. For dicts, use list(d).")
318 randbelow = self._randbelow
319 n = len(population)
TypeError: Population must be a sequence or set. For dicts, use list(d).
как ошибку. Вот мой код:
import random
import numpy as np
from numpy.polynomial.polynomial import polyfit
import matplotlib
import matplotlib.pyplot as plt
import csv
import math
from astropy.io import ascii
filterfile = ("/home/jacob/Documents/Research/FILTER.RES.GOGREEN")
f = open(filterfile, 'r')
# make dictionary to hold all filter curves
filtercurves = {}
for line in f:
# print(repr(line))
line = line.strip()
cols = line.split()
# print(cols)
# find number of lines for next filter curve
nlines = int(cols[0]) # converts string to integer
filtname = cols[1] # name of that filter
# initialize array for lambda and transmission
lam = np.array([])
trans = np.array([])
for iline in range(nlines):
# reads in a single line
transline = f.readline()
transline = transline.strip()
transcols = transline.split()
lam = np.append(lam, float(transcols[1]))
trans = np.append(trans, float(transcols[2]))
filtercurves[filtname] = {'lam': lam, 'trans': trans}
top = (np.trapz(filtercurves['VIMOSV']['trans'] * filtercurves['VIMOSV']['lam'], x = filtercurves['VIMOSV']['lam']))
print(top)
bot = (np.trapz(filtercurves['VIMOSV']['trans'], x = filtercurves['VIMOSV']['lam']))
area = top / bot
print(area)
zfile = ascii.read("/home/jacob/PHOTOMETRY/SPECZ_MATCHED/compilation_SpARCS-0035.dat")
print(zfile)
path = "/home/jacob/PHOTOMETRY"
zfile = path + "/SPECZ_MATCHED/compilation_SpARCS-0035.dat"
zdat = ascii.read(zfile)
photfile = path + "/PHOTOM_CATS/SpARCS-0035_totalall_HAWKIKs.cat"
photdat = ascii.read(photfile)
# this is an array of all indices which satisfy the condition in the ()
izspec = np.where((zdat['spec_z'] > 0) & (photdat['totmask'] == 0) & (photdat['K_flag'] == 0))
print(izspec)
# this prints the rows of the two tables that correspond to these indices
print(photdat['id'][izspec], zdat['PHOTCATID'][izspec], zdat['spec_z'][izspec])
random.seed(21)
sample_list = random.sample(photdat['id'][izspec], k=5)
print(sample_list)
Я ожидаю, что он распечатает пять значений, привязанных к идентификаторам для каждого элемента, но все, что я получаю, это сообщение об ошибке. Я не до конца понимаю, о чем говорит сообщение об ошибке, так как я считаю, что мой ввод является набором, поэтому любая помощь будет потрясающей!