В настоящее время я пишу сценарий, который преобразует измеренные величины галактики внутри апертуры в светимости. Я использую ноутбуки Jupyter с Python 3 и numpy. Я также распространяю неопределенность в измерениях через вторую функцию ниже.
Когда я пытаюсь вызвать функцию luminositieserror
, возвращается ошибка:
TypeError: object of type 'numpy.float64' has no len().
Код, который я использую, выглядит следующим образом:
#converts an array of magnitudes, a_mag, into an array of luminosities
def m_to_L(a_mag, g_dist, abs_s_mag):
list1 =[]
for i in range(len(a_mag)):
ans = 10**(-0.4*(a_mag[i] -5*np.log(g_dist) -5 -abs_s_mag))
list1.append(ans)
return np.array(list1)
#converts an array of magnitude uncertainties, a_mag_err
#into an array of luminosity uncertainties, by calculating
#uncertainty due to each variable in m_to_L and then adding
#them in quadrature, for every index in the array a_mag
def Luminosity_errors(a_mag, a_mag_err, g_dist, g_dist_err, abs_s_mag, abs_s_mag_err):
list1 =[]
for i in range(len(a_mag)):
alpha_mag = abs(m_to_L((a_mag[i] + a_mag_err[i]), g_dist, abs_s_mag) - m_to_L(a_mag[i], g_dist, abs_s_mag))
alpha_dist = abs(m_to_L(a_mag[i], (g_dist + g_dist_err), abs_s_mag) - m_to_L(a_mag[i], g_dist, abs_s_mag))
alpha_solar = abs(m_to_L(a_mag[i], g_dist, (abs_s_mag + abs_s_mag_err)) - m_to_L(a_mag[i], g_dist, abs_s_mag))
ans = (alpha_mag**2 + alpha_dist**2 + alpha_solar**2)**0.5
list1.append(ans)
return np.array(list1)
Затем я вызываю функцию для четко определенных переменных:
luminositieserror = Luminosity_errors(appmagnitudes, appmagerror, g_dist, g_dist_err, abs_s_mag, abs_s_mag_err)
С ошибкой:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-35-7a37ab3a0861> in <module>
----> 1 luminositieserror = Luminosity_errors(appmagnitudes, appmagerror, g_dist, g_dist_err, abs_s_mag, abs_s_mag_err)
<ipython-input-32-96474bd06045> in Luminosity_errors(a_mag, a_mag_err, g_dist, g_dist_err, abs_s_mag, abs_s_mag_err)
14 for i in range(len(a_mag)):
15
---> 16 alpha_mag = abs(m_to_L((a_mag[i] + a_mag_err[i]), g_dist, abs_s_mag) - m_to_L(a_mag[i], g_dist, abs_s_mag))
17
18 alpha_dist = abs(m_to_L(a_mag[i], (g_dist + g_dist_err), abs_s_mag) - m_to_L(a_mag[i], g_dist, abs_s_mag))
<ipython-input-32-96474bd06045> in m_to_L(a_mag, g_dist, abs_s_mag)
3 list1 =[]
4
----> 5 for i in range(len(a_mag)):
6 ans = 10**(-0.4*(a_mag[i]-5*np.log(g_dist)-5-abs_s_mag))
7 list1.append(ans)
TypeError: object of type 'numpy.float64' has no len()
Насколько я понимаю, мне нужно убедить Python, что фиктивная переменная a_mag
на самом деле является массивом. Любой совет о том, как это сделать, будет принята с благодарностью!