2013-06-06 5 views
0

Я пытаюсь вычислить величины некоторых звезд на основе их потока, но я продолжаю получать неправильные значения, и я не знаю почему. Например:Расчет величины в 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] 
+0

вы должны взглянуть на numpy.vectorize: HTTP: //docs.scipy. org/doc/numpy/reference/generated/numpy.vectorize.html, он пощадит некоторые ненужные циклы – bendaizer

+0

@bendaizer - похоже, что у OP всего 25 звезд ... Я не уверен, что векторизация стоит дополнительных сложность :). Конечно, другие улучшения могут быть сделаны с использованием списков и, возможно, 'zip' ... – mgilson

+0

@mgilson Я не ссылался на этот конкретный случай, а просто указывал на существование функции векторизации, что очень удобно, когда массивы начать получать действительно большой :) – bendaizer

ответ

3

Я предполагаю, что вы хотите использовать numpy.log10 (логарифм 10) вместо numpy.log (основание 2).

>>> import numpy as np 
>>> 10.1 - 2.5*np.log(39984./1220000) 
18.645316909086766 
>>> 10.1 - 2.5*np.log10(39984./1220000) 
13.811183979730934 
+0

Да, теперь это работает. Спасибо :) – Steven

1

Вы должны использовать правильную функцию журнала:

In [467]: 10.1 - 2.5 * np.log(39984/1220000) 
Out[467]: 18.645316909086766 

In [468]: 10.1 - 2.5 * np.log10(39984/1220000) 
Out[468]: 13.811183979730934 

Примечание: Python 3

 Смежные вопросы

  • Нет связанных вопросов^_^