我正在尝试在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。
这里有人可以进行故障排除吗?提前致谢!
当您调用MATLAB引擎函数时,列表正在转换为单元格。
[当您将Python®数据作为输入参数传递给MATLAB®函数时,适用于Python的MATLAB引擎将数据转换为等效的MATLAB数据类型。
如here中所述。
您可以在MATLAB中确认数据类型为单元格
>>> eng.eval('class(foo)')
'cell'
现在您知道数据类型,只需转换数据:
>>> eng.eval('mean(cell2mat(foo))')
2.0