gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 00:22:01 24 4
gpt4 key购买 nike

我正在使用适用于 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 dict 中就可以正常工作:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com