python - python 的 matlab 引擎中的 save() 命令

标签 python matlab workspace mat-file matlab-engine

我正在使用适用于 Python 的 MATLAB Engine API https://nl.mathworks.com/help/matlab/matlab-engine-for-python.html

我想打开并保存文件。

#import and start the engine
import matlab.engine
eng = matlab.engine.start_matlab()
print('Matlab engine started')
#File of interest
myBadFile='test.mat'
#Synchronize python/matlab working directory
eng.cd(os.getcwd(),nargout=0)
print(eng.pwd())
#Read file contents
VALUES=eng.load(myBadFile,nargout=1)

到目前为止一切顺利。我真的很惊讶它运行得如此顺利。

我在 VALUES 上完成了我的工作,然后我想再次保存它。 如果我这样做

VALUES=eng.save(myBadFile+'.test','VALUES','-v6',nargout=0)

我得到:

MatlabExecutionError: Variable 'VALUES' not found.

如果我这样做

VALUES=eng.save(myBadFile+'.test',VALUES,'-v6',nargout=0)

我明白

MatlabExecutionError: Argument must contain a character vector.

那么如何保存我的 VALUES,它在 python 环境中是一个有效变量,但在 matlab 中显然看不到它?

最佳答案

save对 MATLAB 工作区中包含的变量进行操作,并且 Python 不与 MATLAB 引擎实例共享作用域。 matlab.engine然而,实例确实有一个 workspace属性,定义如下:

Python dictionary containing references to MATLAB variables. You can assign data to, and get data from, a MATLAB variable through the workspace. The name of each MATLAB variable you create becomes a key in the workspace dictionary. The keys in workspace must be valid MATLAB identifiers (for example, you cannot use numbers as keys).

您可以使用它在 MATLAB 作用域中放置变量。

这段代码,例如:

import matlab.engine
eng = matlab.engine.start_matlab()
x = [1, 2, 3]
eng.save('test.mat', 'x')

如上所示失败:

Error using save
Variable 'x' not found.

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\excaza\AppData\Roaming\Python\Python36\site-packages\matlab\engine\matlabengine.py", line 78, in __call__
    _stderr, feval=True).result()
  File "C:\Users\excaza\AppData\Roaming\Python\Python36\site-packages\matlab\engine\futureresult.py", line 68, in result
    return self.__future.result(timeout)
  File "C:\Users\excaza\AppData\Roaming\Python\Python36\site-packages\matlab\engine\fevalfuture.py", line 82, in result
    self._result = pythonengine.getFEvalResult(self._future,self._nargout, None, out=self._out, err=self._err)
matlab.engine.MatlabExecutionError: Variable 'x' not found.

但是一旦我们将 x 复制到 workspace 字典中,效果就很好:

import matlab.engine
eng = matlab.engine.start_matlab()
x = [1, 2, 3]
eng.workspace['x'] = x
eng.save('test.mat', 'x')

关于python - python 的 matlab 引擎中的 save() 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48790118/

相关文章:

python - 我可以在 ipython shell 中重做/撤消吗?

java - Android 构建工作区错误

python - 如何生成波特图矩阵?

matlab - 从中间层提取CNN特征

xcode - 在Xcode中,如何只清理工作区中的一个项目

ios - 如何将独立的 Xcode 项目作为模块导入另一个项目?

python - 为什么在使用 GTKGLArea 时在 PyOpenGL 中未定义 glGenVertexArrays

python - 递归添加到集合

python - 使用 select 处理多个请求

python - 你如何将一个 Numpy 数组 (mxn) 展开成一个向量