Я пытаюсь вычислить величины некоторых звезд на основе их потока, но я продолжаю получать неправильные значения, и я не знаю почему. Например:Расчет величины в python
Первая звезда имеет поток в V-диапазоне 39,984. Его V-величина равна 10,1 - 2,5 log (39,984/1,220,000) = 13,8 (10,1 и 1,220,000 - от контрольной звезды). Но моя программа вычисляет величину 18,65. Вот мой код:
import numpy as np
import asciidata
fv = []
fb = []
data = asciidata.open('Flux.txt')
for i in data[1]:
fv.append(float(i))
for i in data[2]:
fb.append(float(i))
mv = []
mb = []
mbv = []
for i in range (0,25):
mv.append(10.1 - 2.5 * np.log(fv[i]/1220000))
mb.append(11.0 - 2.5 * np.log(fb[i]/339368))
print i+1, mv[i], mb[i]
вы должны взглянуть на numpy.vectorize: HTTP: //docs.scipy. org/doc/numpy/reference/generated/numpy.vectorize.html, он пощадит некоторые ненужные циклы – bendaizer
@bendaizer - похоже, что у OP всего 25 звезд ... Я не уверен, что векторизация стоит дополнительных сложность :). Конечно, другие улучшения могут быть сделаны с использованием списков и, возможно, 'zip' ... – mgilson
@mgilson Я не ссылался на этот конкретный случай, а просто указывал на существование функции векторизации, что очень удобно, когда массивы начать получать действительно большой :) – bendaizer