我有一个名为func
的Matlab函数M文件。这将单个数字作为输入,并输出单个数字。
我想在Python中使用这些代码,在Python中获得输出,并用它在Python中创建可视化。我使用的是matlab_engine
,我想为0.1到500.0的每个值运行这个函数(0.1步(,并在Python中记录每个值的输出。
为此,我制作了一个从0.1到500.0的numpy数组,将其转换为列表,然后将该列表转换为数据类型为double的Matlab数组。然后,我尝试使用arrayfun
来调用以数组A
为输入的函数,但一直遇到错误。
到目前为止,这是我的Python代码:
import numpy as np
import matlab.engine as me
import matlab as mat
eng = me.start_matlab()
eng.cd(r'/Users/talha/Documents/Sem1/Topics')
array = np.arange(0.1, 500.1, 0.1).tolist()
A = mat.double(array)
x = eng.arrayfun(f,A)
print(x)
我得到错误:NameError: name 'func' is not defined
就在matlab中函数结束之前,我添加了f = @func
行
我也试过
x = eng.arrayfun(eng.func,A) print(x)
但是我得到错误TypeError: unsupported Python data type: matlab.engine.matlabengine.MatlabFunc
我在这里做错了什么?有没有一种更简单的方法可以做到这一点?
在matlab.engine
的文档中,没有提到我能找到的函数句柄。这让我相信,直接用Python创建一个是不可能的。eng.func
是一个Python函数,调用它会导致MATLAB引擎运行MATLAB函数func
。但是eng.func
不是一个MATLAB函数句柄,它是一个Python函数的名称。
MATLAB函数CCD_ 12根据函数名称的字符串表示创建函数句柄。在MATLAB中,str2func('func')
返回与@func
相同的句柄。我们可以从Python中调用这个函数来获得MATLAB函数句柄:
import matlab.engine as me
eng = me.start_matlab()
# ...
f = eng.str2func('func')
x = eng.arrayfun(f, A)