TypeError:"numpy.float64"对象不可迭代 [英] TypeError: 'numpy.float64' object is not iterable

查看:254
本文介绍了TypeError:"numpy.float64"对象不可迭代的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在尝试将一些参数适合现有的数据文件.添加拟合例程后,我不断收到'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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆