Используйте числовые переменные Python в MATLAB

В этом примере показано, как использовать числовые типы Python ® в MATLAB ®.

Используйте числовые типы Python в MATLAB

При вызове функции Python, которая принимает численный входной параметр, MATLAB преобразует двойные значения в типы, которые лучше всего представляют данные в язык Python. Например, чтобы вызвать функции тригонометрии в math Python передайте двойное значение MATLAB.

pynum = py.math.radians(90)
pynum = 1.5708

Для функций, которые возвращают float Python типы, MATLAB автоматически преобразует этот тип в двойной.

class(pynum)
ans = 
'double'

Для функций Python, возвращающих целые типы, MATLAB автоматически преобразует этот тип в int64. Для примера, bit_length функция возвращает количество бит, необходимых для представления целого числа в двоичном формате как int значение.

py.int(intmax).bit_length
ans = int64
    31

Вызов методов Python с числовыми iterable Аргументы

The Python math.fsum функция суммирует значения с плавающей точкой в iterable входной параметр. Вы можете передать вектор MATLAB этой функции. Например, откройте MATLAB patients.mat файл данных и считайте числовой массив Height.

load patients.mat
class(Height)
ans = 
'double'
size(Height)
ans = 1×2

   100     1

Когда вы передаете этот аргумент в Python, MATLAB автоматически преобразует числовые значения в числовые значения Python, и Python итератируется по вектору значениям.

py.math.fsum(Height)
ans = 6707

Использование языка Python array Типы в MATLAB

Предположим, что у вас есть функция Python, которая возвращает следующий Python array.array типа double.

P = py.array.array('d', 1:5)
P = 
  Python array with properties:

    itemsize: 8
    typecode: [1×1 py.str]

    array('d', [1.0, 2.0, 3.0, 4.0, 5.0])

Для прохождения P к функции MATLAB sum, преобразование P в массив MATLAB типа double.

sum(double(P))
ans = 15

Используйте целое число Python array Типы в MATLAB

Предположим, что у вас есть этот массив Python. Вызовите Python reverse функция в массиве, затем преобразуйте результат в массив MATLAB.

arr = py.array.array('i',[int32(5),int32(1),int32(-5)])
arr = 
  Python array with properties:

    itemsize: 4
    typecode: [1×1 py.str]

    array('i', [5, 1, -5])

arr.reverse
A = int32(arr)
A = 1×3 int32 row vector

   -5    1    5

Числовые типы по умолчанию

По умолчанию число в MATLAB является double тип. По умолчанию число (без дробной части) в Python является целым типом. Это различие может вызвать путаницу при передаче чисел в функции Python.

Для примера, когда вы передаете эти номера MATLAB в datetime Python функция, Python читает их как float тип и отображения ошибки:

d = py.datetime.date(2014,12,31)

Python Error: TypeError: integer argument expected, got float

Чтобы исправить ошибку, явно преобразуйте каждое число в целый тип:

d = py.datetime.date(int32(2014),int32(12),int32(31))
d = 
  Python date with properties:

      day: 31
    month: 12
     year: 2014

    2014-12-31

Почему я вижу свойства, когда я отображаю число?

MATLAB отображает все типы Python как объекты, который включает список свойств объектов. Для числовых типов MATLAB отображает ожидаемое выходное значение в последней линии.

py.int(5)
ans = 
  Python int with properties:

    denominator: 1
           imag: 0
      numerator: 5
           real: 5

    5