2016-12-08 15 views
1

В настоящее время я пытаюсь вставить некоторые параметры в существующий файл данных. После добавления процедуры подстановки я продолжаю получать ошибку 'TypeError: '*numpy.float64' object is not iterable*', которая, похоже, имеет какое-то отношение к функции Dl, которую я определил. Я не смог решить это сам, поэтому я был бы очень благодарен за любые советы по этому вопросу.TypeError: объект 'numpy.float64' не итерируется

import pylab as p 
import scipy as s 
from scipy.integrate import odeint,quad 
import numpy as np 
import matplotlib.pyplot as plt 
import math 

z = np.arange(0.00, 1.5, 0.02) 
z1, m1, sigma_m = np.loadtxt('data.txt', unpack=True, usecols=[0,1,2]) 
yerr = sigma_m 


def H(z,omega_m,H0): 
    return H0*p.sqrt(omega_m*(1+z)**3+1-omega_m) 


def Dl(z,omega_m,H0): 
    c = 3*10**5 
    y = [] 
    for i in z: 
     y1 = c*(1+i)*quad(f,0.0,i, args=(omega_m,H0))[0] 
     y.append(y1) 
    return p.asarray(y) 


def f(z,omega_m,H0): 
    return 1./H(z,omega_m,H0) 


def m(z,omega_m,H0,M): 
    q = [] 
    for j in Dl(z,omega_m,H0): 
     q1 = M+5*np.log10(j)+25.0 
     q.append(q1) 
    return p.asarray(q) 


def chi2(omega_m, M): 
    return sum((m(z1,omega_m,70,M)-m1)/sigma_m)**2 

chi2_min=1*10**30 
o = np.arange(0.00, 1.5, 0.02) 
Mrange = np.arange(-1.5, 1.5, 0.02) 

for omega_m in o: 
    for M in Mrange: 
     if chi2(omega_m, M) < chi2_min: 
      omega_min=omega_m 
      M_min=M 
      chi2_min=m(omega_min, M_min, 70, M) 

print(M_min) 
print(chi2_min) 

ответ

1

В вашей процедуре Dl итерация по z недействительна. z - скаляр при каждом вызове.

Преобразуйте вашу программу так, чтобы либо Dl задавался массив, либо удалял цикл в Dl.

1

Ваша проблема, кажется, здесь:

chi2_min=m(omega_min, M_min, 70, M)

omega_min является поплавок, который переходит в руки Dl() в m() здесь:

for j in Dl(z,omega_m,H0):

, а затем Dl() пытается перебирать его :

for i in z:

который поднимает свою ошибку

Чтобы исправить, я рекомендую вам пройти omega_min в виде списка:

chi2_min=m([omega_min], M_min, 70, M)

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