'float'对象没有属性'__getitem__'Python错误

时间:2014-09-20 15:04:36

标签: python

当我运行代码时

import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt

# Initial conditions

def f_func(eta,y_in):
    y_out = np.zeros(3)
    y_out[0] = y_in[1]
    y_out[1] = y_in[2]
    y_out[2] = -y_in[0]*y_in[2]/2
    return y_out

eta = np.linspace(0,8,100)
X0 = [0,0,0.33206]
X = odeint(f_func,X0,eta)

我收到错误

 'float' object has no attribute '__getitem__'

当我运行以下MATLAB程序时,一切正常。 MATLAB函数ode45等同于Pythons的odeint。

主程序:

clear

global beta
beta = 1;

initial_value = [0,0,1.2322];
eta = linspace(0,4,100)
[x_out, y_out] = ode45(@falkner_skan,eta,initial_value);

plot(x_out,y_out(:,2))

falkner_skan功能:

function y_out = falkner_skan(x,y_in)

global beta

y_out(1,1) = y_in(2);
y_out(2,1) = y_in(3);
y_out(3,1) = -y_in(1)*y_in(3) - beta*(1-y_in(2)^2);

end

Thisthis以及this主题似乎没有给我任何指导。

3 个答案:

答案 0 :(得分:4)

似乎y_in不是列表而是浮点值。错误增加是因为您试图获取一个对象obj[x]的项不支持它。

查看documentation for odeint它说输入函数应该有两个参数,第一个是你的数据对象,第二个应该是float。因此,您对f_func的实施是错误的。

答案 1 :(得分:1)

NumPy有float 64对象,它有item()函数,np.float64(10.5).item()

答案 2 :(得分:0)

我有同样的问题。根据{{​​3}},在f_func(eta,y_in)中,更改eta和y_in的顺序,即将其写为f_func(y_in,eta)或将参数 tfirst 设置为