ValueError: x и y должны иметь одинаковое первое измерение, но иметь формы (10,) и (1, 10) - PullRequest
0 голосов
/ 28 сентября 2019

Мне нужно построить график рассеяния, используя данные из таблицы Excel.Я не очень знаком с Numpy, поэтому я сделал основные функции Python.Если есть способ легко преобразовать код с помощью numpy, это было бы здорово.У меня есть два массива с 10 значениями в каждом, но я продолжаю получать код ошибки, что они оба должны быть одного и того же измерения.

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

import random
import numpy as np
from numpy.polynomial.polynomial import polyfit
import matplotlibimport 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 = []
flagarr = []
maskarr = []
goodgal = []

xval = np.array([3650, 4450, 5510, 6580, 8060, 9000, 12200, 21900, 35500, 44930])

yval = []
wave = []

galoney = []
galtwoy = []
galthreey = []
galfoury = []
galfivey = []


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)
        self.irac1 = float(irac1)
        self.irac2 = float(irac2)
        self.irac3 = float(irac3)


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)
        goodflag = int(k_flag)
        goodmask = totmask

        flagarr.append(goodflag)
        maskarr.append(goodmask)


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 rangal in sample_list:
    yval.append(rangal.vimosu)
    yval.append(rangal.vimosb)
    yval.append(rangal.vimosv)
    yval.append(rangal.vimosr)
    yval.append(rangal.vimosi)
    yval.append(rangal.decamz)
    yval.append(rangal.hawkij)
    yval.append(rangal.hawkiks)
    yval.append(rangal.irac1)
    yval.append(rangal.irac2)
    print(rangal.id)

galoney.append(yval[0:10])
galtwoy.append(yval[10:20])
galthreey.append(yval[20:30])
galfoury.append(yval[30:40])
galfivey.append(yval[40:50])

print(yval)
print(galoney)
print(galtwoy)
print(galthreey)
print(galfoury)
print(galfivey)
print(xval)

plt.plot(xval, galoney, '.')
plt.xlabel('Wavelength Angstroms')
plt.ylabel('f_nu')
plt.title('Galaxy One: 2279')
plt.show()

Я ожидаю появления точечного графика, но все, что я получаю, это "ValueError: x и y должны иметь одно и то же первое измерение,но имеют формы (10,) и (1, 10) ".Я видел другие подобные ошибки на этом форуме, но они имеют дело с массивами.Мне было интересно, если есть способ не использовать NumPy или если это невозможно, как преобразовать в NUMPY.Любая помощь будет потрясающей!Спасибо!

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