Команда save() в движке matlab для python
Я использую MATLAB Engine API для Python 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 ее не видно?
1 ответ
save
работает с переменными, содержащимися в рабочей области MATLAB, и Python не разделяет область видимости с экземплярами (ами) движка MATLAB. matlab.engine
Экземпляр, однако, имеет workspace
атрибут, определяемый следующим образом:
Словарь Python, содержащий ссылки на переменные MATLAB. Вы можете назначать данные и получать данные из переменной MATLAB через
workspace
, Имя каждой переменной MATLAB, которую вы создаете, становится ключом вworkspace
толковый словарь. Ключи вworkspace
должны быть действительными идентификаторами MATLAB (например, вы не можете использовать числа в качестве ключей).
Что вы можете использовать для размещения переменных в области видимости 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')