Попытка передать массивы MATLAB в пустой массив - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь вызвать функцию Matlab в python через matlab.engine. Функция принимает один вход (число, соответствующее filenum) и выводит 4 массива matlab. В скрипте Python я пытаюсь взять эти 4 переменные и преобразовать их в массив Numpy, однако я получаю сообщение об ошибке:

ValueError: too many values to unpack (expected 4)

Исходная строка функций Matlab читается как:

function [out1,out2,out3,out4] = myfunc(filenum)

Я пробовал альтернативные методы, чтобы понять, почему это происходит. Интересно, что если я сохраню выходные данные функции matlab только в одной переменной, код работает нормально, но значение переменной не то, что мне нужно.

Вот весь соответствующий код (кроме самой функции matlab):

import matlab.engine
import numpy as np

eng = matlab.engine.start_matlab()

out1,out2,out3,out4 = eng.myfunc(101)

final1 = np.asarray(out1)
final2 = np.asarray(out2)
final3 = np.asarray(out3)
final4 = np.asarray(out4)


Прежде чем блок кода final1 ... может даже запуститься, я получаю сообщение об ошибке в строке, где я пытаюсь вызвать функцию.

Также я уверен, что функция Matlab работает и выводит 4 массива.

1 Ответ

1 голос
/ 14 мая 2019

Документация гласит:

Если вы знаете, что функция может возвращать несколько аргументов, используйте аргумент nargout, чтобы указать количество выходных аргументов.

А затем он приводит пример:

t = eng.gcd(100.0,80.0,nargout=3)
print(t)

(20.0, 1.0, -1.0)

Таким образом, вам, вероятно, нужно сделать

out1,out2,out3,out4 = eng.myfunc(101,nargout=4)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...