我收到此错误消息:无法根据规则“安全”将数组数据从 dtype('O') 转换为 dtype('float64')

如何解决我收到此错误消息:无法根据规则“安全”将数组数据从 dtype('O') 转换为 dtype('float64')

这是我的代码

import numpy as np
from scipy.optimize import minimize
import sympy as sp
sp.init_printing()
from sympy import *
from sympy import Symbol,Matrix

rom sympy import *
def make_Aij(m,n,a='a') :
    from sympy import Symbol,Matrix # just in case they aren't already loaded
    A = zeros(m,n)
    for i in range(0,m) :
        for j in range(0,n) :
            s = a+'_'+str(i)+str(j)
            exec  (s + "= Symbol('" + s + "')") # go look up what "exec" does!
            exec ("A[i,j] = " + s)
    return A
C = make_Aij(1,2,'c')
C

z = C[0,0]
g = C[0,0]**2-C[0,1]**2
g
h = C[0,0]
h

#Function defined
def function(h):
    return g
g

#Jacobian working with sympy
q = diff(g,C[0,0])
q

#Jacobian final
def jacobian(h):
    return q
q

Hf = diff(q,0])
Hf

#Hessianf
def Hessianf(h):
    return Hf
Hf

from scipy.optimize import Bounds
bounds = Bounds(-1,1)

h0 = (0*C[0,1])

res = minimize(function,h0,method='trust-constr',jac=jacobian,hess=Hessianf,options={'verbose': 1},bounds=bounds)

错误信息: -------------------------------------------------- -------------------------

TypeError                                 Traceback (most recent call last)
<ipython-input-41-94c28f7f32b2> in <module>
----> 1 res = minimize(function,2 
      3                options={'verbose': 1},bounds=bounds)

~\anaconda3\lib\site-packages\scipy\optimize\_minimize.py in minimize(fun,x0,args,method,jac,hess,hessp,bounds,constraints,tol,callback,options)
    626                                constraints,callback=callback,**options)
    627     elif meth == 'trust-constr':
--> 628         return _minimize_trustregion_constr(fun,629                                             bounds,630                                             callback=callback,**options)

~\anaconda3\lib\site-packages\scipy\optimize\_trustregion_constr\minimize_trustregion_constr.py in _minimize_trustregion_constr(fun,grad,xtol,gtol,barrier_tol,sparse_jacobian,maxiter,verbose,finite_diff_rel_step,initial_constr_penalty,initial_tr_radius,initial_barrier_parameter,initial_barrier_tolerance,factorization_method,disp)
    507 
    508     elif method == 'tr_interior_point':
--> 509         _,result = tr_interior_point(
    510             objective.fun,objective.grad,lagrangian_hess,511             n_vars,canonical.n_ineq,canonical.n_eq,~\anaconda3\lib\site-packages\scipy\optimize\_trustregion_constr\tr_interior_point.py in tr_interior_point(fun,lagr_hess,n_vars,n_ineq,n_eq,constr,fun0,grad0,constr_ineq0,jac_ineq0,constr_eq0,jac_eq0,stop_criteria,enforce_feasibility,state,initial_tolerance,initial_penalty,initial_trust_radius,factorization_method)
    319     while True:
    320         # Solve SQP subproblem
--> 321         z,state = equality_constrained_sqp(
    322             subprob.function_and_constraints,323             subprob.gradient_and_jacobian,~\anaconda3\lib\site-packages\scipy\optimize\_trustregion_constr\equality_constrained_sqp.py in equality_constrained_sqp(fun_and_constr,grad_and_jac,constr0,jac0,trust_lb,trust_ub,scaling)
     80     Z,LS,Y = projections(A,factorization_method)
     81     # Compute least-square lagrange multipliers
---> 82     v = -LS.dot(c)
     83     # Compute Hessian
     84     H = lagr_hess(x,v)

~\anaconda3\lib\site-packages\scipy\sparse\linalg\interface.py in dot(self,x)
    416 
    417             if x.ndim == 1 or x.ndim == 2 and x.shape[1] == 1:
--> 418                 return self.matvec(x)
    419             elif x.ndim == 2:
    420                 return self.matmat(x)

~\anaconda3\lib\site-packages\scipy\sparse\linalg\interface.py in matvec(self,x)
    230             raise ValueError('dimension mismatch')
    231 
--> 232         y = self._matvec(x)
    233 
    234         if isinstance(x,np.matrix):

~\anaconda3\lib\site-packages\scipy\sparse\linalg\interface.py in _matvec(self,x)
    528 
    529     def _matvec(self,x):
--> 530         return self.__matvec_impl(x)
    531 
    532     def _rmatvec(self,x):

~\anaconda3\lib\site-packages\scipy\optimize\_trustregion_constr\projections.py in least_squares(x)
    151         # lu_sol = [aux]
    152         #          [ z ]
--> 153         lu_sol = solve(v)
    154         # return z = inv(A A.T) A x
    155         return lu_sol[n:m+n]

TypeError: Cannot cast array data from dtype('O') to dtype('float64') according to the rule 'safe'

我只想计算沿 2 变量函数 f(c00,c01) 的 c00 轴的最小值,并有一些界限。因此,我应该得到值 c00 作为 C01 的函数(这里 c01 是一个参数)。我认为问题来自与 scipy.optimize 相关的 sympy 函数

提前致谢。

解决方法

符号 sympy 与数字 scipynumpy 不能很好地混合。数字函数不理解 sympy 的符号。

为了让事情一起工作,所有符号函数都需要转换为 numpy 等价物。 sympylambdify 可以将 sympy 表达式转换为 numpy 函数。在您的代码中,您可以按如下方式使用它:

np_function = sp.lambdify(h,function(h))
np_jacobian = sp.lambdify(h,jacobian(h))
np_hessian = sp.lambdify(h,Hessianf(h))

res = minimize(np_function,h0,method='trust-constr',jac=np_jacobian,hess=np_hessian,options={'verbose': 1},bounds=bounds)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?