Проблема заключается в том, что движок MATLAB для не поддерживает ни один из математических операторов python в отношении типов данных, которые он определяет. Вы даже не можете добавить два типа данных MATLAB.
>>> matlab.double([[1]])+matlab.double([[1]])
TypeError: unsupported operand type(s) for +: 'double' and 'double'
double
в этом исключении является MATLAB двойным, а не эквивалентный Python собственного типа (который float
).
Единственное, что я мог бы получить, чтобы работать последовательно были Numpy массивы:
>>> matlab.double([[1]])+np.array(1)
array([[2.]])
Однако следует отметить, что результат является array
. Это тип данных numpy. Таким образом, казалось бы, MATLAB также не поддерживает массивы numpy, но массивы numpy поддерживают типы данных MATLAB и преобразуют их в массивы. Вероятно, это не то, что вы хотите.
Нет причин, по которым это невозможно. Python предоставляет все крючки для реализации такого рода вещей. MATLAB просто не поддерживает его.
Если вы не хотите конвертировать в массивы numpy, то вам нужно использовать функциональные версии операторов MATLAB для выполнения вычислений. Это значительно более многословным, но работает если следовать MATLAB правила литья:
>>> mat.times(dims, 5.)
matlab.double([[5.0,5.0,5.0]])
К сожалению, добавление целых чисел двойных матриц не допускается в среде MATLAB вообще (даже в собственном переводчика MATLAB в), так что вам нужно будет использовать поплавок:
>>> mat.times(dims, 5)
MatlabExecutionError: Integers can only be combined with integers of the same class, or scalar doubles.
разница заключается в том, что 5
в Python является целым числом, в то время как 5
в MATLAB является двойной, так что вы не будете видеть эту ошибку при использовании MATLAB, если вы явно не преобразовать в тип целого числа.
Вы также можете использовать функцию eval
оценить символическое выражение, но сначала вам нужно загрузить переменную в MATLAB:
>>> mat.workspace['dims'] = dims
>>> mat.eval('dims*5')
matlab.double([[5.0,5.0,5.0]])
Было бы также теоретически возможно создать класс, который оборачивает классы MATLAB и поддерживает операции Python, но это становится слишком сложным для этого пространства.
использование '5.0' вместо' 5' – CoconutBandit
Я уже попробовал эту я получаю эту ошибку еще раз: TypeError: неподдерживаемый тип операнда (ов) для * =: «двойной» и «Поплавок» –
показать * весь * ошибки след. –