MATLAB中Python数值向量的计算平均值

问题描述 投票:2回答:1

我正在尝试在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移植到引擎工作区(作为data_list)时以某种方式无法识别存储在foo中的对象的类型。我试过(1)在创建对象数据时指定dtype,以及(2)删除data.tolist()并直接将data移植过来,但是两种方法都不能解决问题。 (方法2产生另一个错误,“ TypeError:不支持的Python数据类型:numpy.ndarray”。)

我正在使用MATLAB R2018b和Python 3.6。

这里有人可以进行故障排除吗?提前致谢!

python matlab porting matlab-engine
1个回答
1
投票

当您调用MATLAB引擎函数时,列表正在转换为单元格。

[当您将Python®数据作为输入参数传递给MATLAB®函数时,适用于Python的MATLAB引擎将数据转换为等效的MATLAB数据类型。

here中所述。

您可以在MATLAB中确认数据类型为单元格

>>> eng.eval('class(foo)')
'cell'

现在您知道数据类型,只需转换数据:

>>> eng.eval('mean(cell2mat(foo))')
2.0
© www.soinside.com 2019 - 2024. All rights reserved.