在 MATLAB 中计算 Python 数值向量的平均值
Computing mean of Python numeric vector in MATLAB
我正在尝试在 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)')
我在最后一行之后一直遇到以下错误:
"File /Applications/MATLAB_R2018b.app/toolbox/matlab/datafun/mean.m, line 127, in mean Invalid data type. First argument must be numeric or logical."
据我了解,这是由于 MATLAB 在将 data_list
移植到引擎工作区时(如 foo
)无法识别存储在 data_list
中的对象类型.我试过 (1) 在创建对象数据时指定 dtype
,以及 (2) 删除 data.tolist()
并直接移植 data
,但这两种方法都不能解决问题。 (方法 2 产生不同的错误,"TypeError: unsupported Python data type: numpy.ndarray"。)
我正在使用 MATLAB R2018b 和 Python 3.6.
这里有人可以帮忙解决问题吗?提前致谢!
当您调用 MATLAB 引擎函数时,列表正在转换为单元格。
When you pass Python® data as input arguments to MATLAB® functions,
the MATLAB Engine for Python converts the data into equivalent MATLAB
data types.
如文档所述here。
在MATLAB中可以确认数据类型为cell
>>> eng.eval('class(foo)')
'cell'
知道数据类型后,只需转换数据即可:
>>> eng.eval('mean(cell2mat(foo))')
2.0
我正在尝试在 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)')
我在最后一行之后一直遇到以下错误:
"File /Applications/MATLAB_R2018b.app/toolbox/matlab/datafun/mean.m, line 127, in mean Invalid data type. First argument must be numeric or logical."
据我了解,这是由于 MATLAB 在将 data_list
移植到引擎工作区时(如 foo
)无法识别存储在 data_list
中的对象类型.我试过 (1) 在创建对象数据时指定 dtype
,以及 (2) 删除 data.tolist()
并直接移植 data
,但这两种方法都不能解决问题。 (方法 2 产生不同的错误,"TypeError: unsupported Python data type: numpy.ndarray"。)
我正在使用 MATLAB R2018b 和 Python 3.6.
这里有人可以帮忙解决问题吗?提前致谢!
当您调用 MATLAB 引擎函数时,列表正在转换为单元格。
When you pass Python® data as input arguments to MATLAB® functions, the MATLAB Engine for Python converts the data into equivalent MATLAB data types.
如文档所述here。
在MATLAB中可以确认数据类型为cell
>>> eng.eval('class(foo)')
'cell'
知道数据类型后,只需转换数据即可:
>>> eng.eval('mean(cell2mat(foo))')
2.0