Выбор 5 случайных элементов данных из таблицы ASCII - PullRequest
0 голосов
/ 26 октября 2019

Итак, я пытаюсь выбрать пять случайных элементов из таблицы 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)

Я ожидаю, что он распечатает пять значений, привязанных к идентификаторам для каждого элемента, но все, что я получаю, это сообщение об ошибке. Я не до конца понимаю, о чем говорит сообщение об ошибке, так как я считаю, что мой ввод является набором, поэтому любая помощь будет потрясающей!

1 Ответ

0 голосов
/ 26 октября 2019

Неважно, я немного нырнул и обнаружил, что когда он сказал list (d), все, что мне нужно было сделать, это сделать список (photdat ['id'] [izspec]), и он вернул 5 идентификационных номеров

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...