首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pyomo,TypeError:“numpy.ndarray”对象不可调用

Pyomo,TypeError:“numpy.ndarray”对象不可调用
EN

Stack Overflow用户
提问于 2021-10-12 16:08:19
回答 1查看 127关注 0票数 0

我正在尝试使用Pyomo中的scipy命令,这是一个基于Python语言的优化器。

我的目标是在有风场的情况下为飞机开发一个最佳的轨迹。我在网格点上有数据测量。我使用scipy生成插值函数,如下所示

代码语言:javascript
复制
xi, yi = np.linspace(X2.astype('float').min(), X2.astype('float').max(), 100), np.linspace(Y2.astype('float').min(), Y2.astype('float').max(), 100)
xi, yi = np.meshgrid(xi, yi)

# Interpolate
rbfX = sp.interpolate.Rbf(X2, Y2, Wx2, function='multiquadric')
zXi = rbfX(xi, yi)

我是怎么叫scipy的。这是我计算任何点的风速的方法。我在插入风速。

然后,在pyomo部分中,我写道

代码语言:javascript
复制
def Wind_lammda_definition1(model, i):
    return m.Wind_lammda[i,1] ==zXi(m.lammda[i,1], m.phi[i,1])
m.Wind_lammda_const1 = Constraint(m.N, rule = Wind_lammda_definition1)

m.lammda和m.phi是飞机的位置。

不幸的是,一旦我运行了代码,我得到了以下错误:

代码语言:javascript
复制
    return m.Wind_lammda[i,1] ==zXi(m.lammda[i,1], m.phi[i,1])

TypeError: 'numpy.ndarray' object is not callable

我检查了thisthis线程,就我所见,这是一条错误消息,如果有语法错误就会出现。然而,我还没有找到,我认为这是因为我不能将scipy移植到Pyomo中。这是真的吗?还是可以修复的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-12 20:09:32

让我们设置一个Rbf对象:

代码语言:javascript
复制
In [177]: X,Y = np.meshgrid(np.arange(4),np.arange(4))
In [178]: Z = np.sin(X-Y)
In [179]: fn = interpolate.Rbf(X,Y,Z)
In [180]: type(fn)
Out[180]: scipy.interpolate.rbf.Rbf

这就像你的rbfX。根据文档,它是callable,也就是说它有一个__call__方法。

如果我们用2个标量来调用它,我们得到一个单元素数组:

代码语言:javascript
复制
In [181]: fn(1.5, 2.3)
Out[181]: array(-0.73094599)

用一对数组调用它,我们得到一个大小匹配的数组:

代码语言:javascript
复制
In [184]: fn(np.arange(1,3,.5), np.arange(0,2,.5))
Out[184]: array([0.84147098, 0.85639014, 0.84147098, 0.85639014])

这就是你的zXi。看看它的typeshapedtype。这是一个数组。它不能被“调用”,并且有关于如何对其进行索引的特定规则。

zXi(m.lammda[i,1], m.phi[i,1])是错误的,因为它试图“调用”numpy数组。但是zXi[m.lammda[i,1], m.phi[i,1]]显然有无效的索引,很可能是浮点型。我还没有检查它们是什么。

如果这两个参数是插值点,则rbfX(m.lammda[i,1], m.phi[i,1])可能会起作用。

zXi = rbfX(xi, yi)会创建一个数组(可能是2d (100,100)),其中包含在xi,yi网格处插值的值。您可以选择一个元素,例如zXi[50,50]或值数组。但是你不能把它当做插值函数,给它一个浮点值。

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

https://stackoverflow.com/questions/69543751

复制
相关文章

相似问题

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