我正在尝试解决一个优化问题,其中要优化的函数的输入是12x1向量,输出是大小为6x3的矩阵。我尝试使用scipy.Optimize中的fsolve,根解算器来解决这个问题,但得到了以下错误:
fsolve: there is a mismatch between the input and output shape of the 'func' argument 'f'.Shape should be (12,) but it is (6,3).
但在MatLab中使用Fsolve可以很容易地解决这个问题。因此,我创建了原始问题的一个非常简化的版本:
import matlab.engine
eng = matlab.engine.start_matlab()
import numpy as np
func = lambda x: x[0]**2 + x[1]**2 -25
eng.fsolve(func,eng.rand(2,1))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\reach\anaconda3\envs\MyEnv\lib\site-
packages\matlab\engine\matlabengine.py", line 66, in __call__
out=_stdout, err=_stderr)
TypeError: unsupported Python data type: function
1条答案
按热度按时间nkcskrwz1#
从matlab到python的数据类型Map可能非常麻烦,而且似乎
lambda
函数没有被matlab引擎正确识别为函数句柄。官方文档没有提供有关可调用转换的有用信息,因为只有these standard data types are natively supported for passing.如果定义一个适当的函数(使用
def
)没有帮助,我建议使用您的matlab代码(可能使用标准数据类型参数)编写一个.m
文件,并按照here的说明从python中运行它。