Команда 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.

If I do

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

я получил

MatlabExecutionError: Argument must contain a character vector.

Итак, как мне сохранить свои ЗНАЧЕНИЯ, которые являются допустимой переменной в среде Python, но, по-видимому, не видны в Matlab?


person 00__00__00    schedule 14.02.2018    source источник


Ответы (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 dict:

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