python - 在MATLAB中计算Python数值向量的平均值
问题描述
我正在尝试在 MATLAB 中计算Python数值向量的平均值。澄清一下,我使用的是 Python,但我试图通过在 Python 环境中运行 MATLAB 来依赖一些特定于 MATLAB 的函数。我正在matlab.engine
这样做:
##### (From my Python script) #####
# Simple MATLAB experiment
import numpy as np
!pip install matlab
import matlab.engine
eng = matlab.engine.start_matlab()
data = np.arange(5)
data_list = data.tolist()
eng.workspace['foo'] = data_list
eng.eval('mean(foo)')
在最后一行之后,我一直遇到以下错误:
“文件 /Applications/MATLAB_R2018b.app/toolbox/matlab/datafun/mean.m,第 127 行,平均数据类型无效。第一个参数必须是数字或逻辑。”
据我了解,这是由于 MATLAB 在移植到引擎工作区data_list
时以某种方式无法识别存储在其中的对象类型(如)。我试过(1)在创建对象数据时指定,(2)直接删除和移植,但这两种方法都不能解决问题。(方法 2 产生不同的错误,“TypeError: unsupported Python data type: numpy.ndarray”。)data_list
foo
dtype
data.tolist()
data
我正在使用 MATLAB R2018b 和 Python 3.6。
这里有人可以帮忙解决问题吗?提前致谢!
解决方案
当您调用 MATLAB 引擎函数时,列表将被转换为单元格。
当您将 Python® 数据作为输入参数传递给 MATLAB® 函数时,MATLAB Engine for Python 会将数据转换为等效的 MATLAB 数据类型。
如此处所述。
您可以在 MATLAB 中确认数据类型为单元格
>>> eng.eval('class(foo)')
'cell'
现在您知道数据类型,只需转换数据:
>>> eng.eval('mean(cell2mat(foo))')
2.0
推荐阅读
- java - Google Drive API v3-在Java文件夹中创建一个文件夹
- php - 通过 PHP 将不规则 XML 导入 MySQL
- integration-testing - 为公共存储库保护测试数据的方法
- php - Bash 执行 PHP 脚本 - 权限被拒绝
- game-development - 平铺地图编辑器切断导入 png 的边缘
- angular - 角度 2 如何在表单控件上设置初始错误状态
- python - Ubuntu 18.04 “ModuleNotFoundError: No module named 'boto3'” 在“pip install boto3”之后?
- javascript - 时间戳字段上的 Firestore“位置”查询
- azure-logic-apps - Azure SQL - 从 SSMS 手动运行存储过程需要 16 分钟,使用逻辑应用运行它需要 > 12 小时
- sqlalchemy - Session.add() 没有添加任何东西,但也没有失败