TypeError:"numpy.float64"对象不可迭代 [英] TypeError: 'numpy.float64' object is not iterable
问题描述
我目前正在尝试将一些参数适合现有的数据文件.添加拟合例程后,我不断收到'TypeError: '*numpy.float64' object is not iterable*'
错误,这似乎与我定义的Dl函数有关.我自己无法解决此问题,因此,我非常感谢您提供有关此问题的任何提示.
I'm currently trying to fit some parameters to an existing data file. After adding a fitting routine I keep getting the 'TypeError: '*numpy.float64' object is not iterable*'
error, which seems to have something to do with the Dl function that i defined. I haven't been able to solve this myself, so I'd be really grateful for any tips concerning this matter.
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)
推荐答案
您的问题似乎在这里:
chi2_min=m(omega_min, M_min, 70, M)
omega_min
是一个浮点数,它在此处传递到m()
中的Dl()
:
omega_min
is a float, which gets passed to Dl()
in m()
here:
for j in Dl(z,omega_m,H0):
,然后Dl()
尝试对其进行迭代:
and then Dl()
tries to iterate it:
for i in z:
这会引起您的错误
要解决此问题,建议您将omega_min
作为列表传递:
To fix, I recommend you pass omega_min
as a list:
chi2_min=m([omega_min], M_min, 70, M)
这篇关于TypeError:"numpy.float64"对象不可迭代的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!