使用Python列表作为Python中Matlab函数的输入



我有一个名为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)

相关内容

  • 没有找到相关文章

最新更新