首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“‘float”对象没有属性“”__getitem__“”Python错误

“‘float”对象没有属性“”__getitem__“”Python错误
EN

Stack Overflow用户
提问于 2014-09-20 23:04:36
回答 3查看 25.7K关注 0票数 3

当我运行代码时

代码语言:javascript
复制
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)

我得到了错误

代码语言:javascript
复制
 'float' object has no attribute '__getitem__'

当我运行下面的MATLAB程序时,一切都正常。MATLAB中的ode45函数相当于Python的odeint。

主程序:

代码语言:javascript
复制
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函数:

代码语言:javascript
复制
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

Thisthisthis线程似乎没有给我任何指导。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-20 23:08:50

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

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

票数 4
EN

Stack Overflow用户

发布于 2017-12-01 01:33:28

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

票数 1
EN

Stack Overflow用户

发布于 2019-05-09 02:07:46

我也有同样的问题。根据documentation for odeint,在f_func( eta,y_in)中,更改eta和y_in的顺序,即将其写为f_func(y_in,eta)或将参数tfirst设置为True。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25950113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档