我正在使用适用于 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 theworkspace
dictionary. The keys inworkspace
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/