python - 使用 Python 列表作为 Python 中 Matlab 函数的输入
问题描述
我有一个 Matlab 函数 M 文件,名为func
. 这需要一个数字作为输入,并输出一个数字。
我想在 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 函数str2func
根据函数名称的字符串表示形式创建函数句柄。在 MATLAB 中,str2func('func')
返回与@func
. 我们可以从 Python 调用这个函数来获得一个 MATLAB 函数句柄:
import matlab.engine as me
eng = me.start_matlab()
# ...
f = eng.str2func('func')
x = eng.arrayfun(f, A)
推荐阅读
- node.js - BigQuery:从 Cloud Storage 执行加载作业时,NodeJS 客户端库似乎不尊重 useAvroLogicalTypes
- angular - Angular 6 cors 问题无法使用代理
- r - R knitr:将 spin() 与 R 和 Python 代码一起使用
- c - 有没有一种快速的方法来检查初始化结构中的所有属性是否都未初始化?
- javascript - 使用 HTML2Canvas 下载图像
- java - 如何向 cargo 提供 Spring application.properties 文件,以便我的应用程序上下文正确启动?
- phpmyadmin - 覆盖 phpmyadmin 上传限制
- python - 在python中使用布尔标志
- php - 在 Shopware 6 中将自定义实体添加到电子邮件模板
- sql-server - 当我创建存储过程时,它给我的是查询输出,而不是 ssms 中的“命令执行成功”