我试图在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移植到引擎工作区(作为foo)时,不知何故不识别存储在data_list中的对象的类型。我尝试过(1)在创建对象数据时指定dtype,(2)直接删除data.tolist()并移植data,但这两种方法都没有解决这个问题。(方法2生成一个不同的错误,"TypeError:不支持的Python数据类型:numpy.ndarray“)。
我正在使用MATLAB R2018b和Python3.6。
这里有人能帮忙排除故障吗?提前感谢!
发布于 2019-12-11 09:24:26
当您调用MATLAB引擎函数时,列表将被转换为一个单元格。
当将Python数据作为输入参数传递给MATLAB函数时,用于Python的MATLAB引擎将数据转换为等效的MATLAB数据类型。
记录在案的这里。
您可以在MATLAB中确认数据类型是单元格。
>>> eng.eval('class(foo)')
'cell'现在您已经知道了数据类型,只需转换数据:
>>> eng.eval('mean(cell2mat(foo))')
2.0https://stackoverflow.com/questions/59280687
复制相似问题