我正在尝试在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:不支持的Python数据类型:numpy.ndarray”。)data_list
foo
dtype
data.tolist()
data
我正在使用MATLAB R2018b和Python 3.6。
有人可以帮助解决问题吗?提前致谢!
当您调用MATLAB引擎函数时,该列表将转换为单元格。
将Python®数据作为输入参数传递给MATLAB®函数时,用于Python的MATLAB引擎会将数据转换为等效的MATLAB数据类型。
作为记录在这里。
您可以在MATLAB中确认数据类型为单元格
>>> eng.eval('class(foo)')
'cell'
现在您知道了数据类型,只需转换数据即可:
>>> eng.eval('mean(cell2mat(foo))')
2.0
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句