【问题标题】:Magnitude calculation in pythonpython中的幅度计算
【发布时间】: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 我不是指这个具体案例,而只是指出向量化函数的存在,当数组开始变得非常大时,它会派上用场:)

标签: python flux


【解决方案1】:

我假设您想使用 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

【讨论】:

    【解决方案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

    【讨论】:

      猜你喜欢
      • 2021-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      相关资源
      最近更新 更多