python中的震级计算

python中的震级计算,python,flux,Python,Flux,我试图根据一些恒星的磁通量来计算它们的大小,但我总是得到错误的值,我不知道为什么。 例如: 第一颗恒星的V波段通量为39984。它的V星等等于10.1-2.5log(39984/1220000)=13,8(10.1和1220000来自参考星)。但我的程序计算出的震级是18.65。这是我的密码: import numpy as np import asciidata fv = [] fb = [] data = asciidata.open('Flux.txt') for i in data[

我试图根据一些恒星的磁通量来计算它们的大小,但我总是得到错误的值,我不知道为什么。 例如:

第一颗恒星的V波段通量为39984。它的V星等等于10.1-2.5log(39984/1220000)=13,8(10.1和1220000来自参考星)。但我的程序计算出的震级是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.log10
(log base 10)而不是
numpy.log
(base 2)


我假设您想使用
numpy.log10
(log base 10)而不是
numpy.log
(base 2)


您需要使用正确的日志功能:

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

您需要使用右日志函数:

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

您应该看看numpy.vectorize:,它将节省一些不必要的资源loops@bendaizer--看起来OP只有25颗星。。。我不确定向量化是否值得增加复杂性:)。当然,还可以通过列表理解进行其他改进,可能还有
zip
。@mgilson我不是指这个具体的例子,而是指存在向量化函数,当数组开始变大时,它非常方便:)你应该看看numpy.vectorize:,这将节省一些不必要的费用loops@bendaizer--看起来OP只有25颗星。。。我不确定向量化是否值得增加复杂性:)。当然,还可以通过列表理解进行其他改进,可能还有
zip
。@mgilson我并不是指这个具体案例,而是指存在向量化函数,当数组开始变大时,向量化函数非常有用:)