【问题标题】:Computing mean of Python numeric vector in MATLAB在MATLAB中计算Python数值向量的平均值
【发布时间】:2020-04-04 10:25:12
【问题描述】:

我正在尝试在 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: unsupported Python data type: numpy.ndarray”。)

我正在使用 MATLAB R2018b 和 Python 3.6。

这里有人可以帮忙解决问题吗?提前致谢!

【问题讨论】:

    标签: python matlab porting matlab-engine


    【解决方案1】:

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

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

    如文档所述here

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

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

    既然您知道数据类型,只需转换数据:

    >>> eng.eval('mean(cell2mat(foo))')
    2.0
    

    【讨论】:

      猜你喜欢
      • 2014-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      • 2011-03-28
      • 2017-09-23
      相关资源
      最近更新 更多