【发布时间】:2013-06-02 11:24:00
【问题描述】:
我正在尝试根据某些恒星的通量来计算它们的大小,但我一直得到错误的值,我不知道为什么。 例如:
第一颗恒星在 V 波段的通量为 39,984。它的 V 级等于 10.1 - 2.5log(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:docs.scipy.org/doc/numpy/reference/generated/…,它会省去一些不必要的循环
-
@bendaizer -- 看起来 OP 只有 25 颗星......我不确定矢量化是否值得额外的复杂性:)。当然,可以通过列表理解和
zip进行其他改进... -
@mgilson 我不是指这个具体案例,而只是指出向量化函数的存在,当数组开始变得非常大时,它会派上用场:)