exponenta event banner

Сопоставление типа данных MATLAB и Python

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

Передача скалярных значений в Python

Тип входного аргумента MATLAB -
Только скалярные значения

Результирующий Python py. Напечатать

Примеры

double
single

float

Использование цифровых переменных Python в MATLAB

Комплекс single
Комплекс double

complex

z = complex(1,2);
py.cmath.polar(z)
ans = 
  Python tuple with no properties.

    (2.23606797749979, 1.1071487177940904)

int8
uint8
int16
uint16
int32

int

 

uint32
int64
uint64

int
long (только версия 2.7)

 

NaN

float("nan")

 

Inf

float("inf")

 

string скаляр
char вектор

str

Использование переменных Python str в MATLAB

<missing> значение в string

None

py.list({string(missing),'Value'})
ans = 
  Python list with no properties.

    [None, 'Value']

logical

bool

 

Структура

dict

Использование переменных Python dict в MATLAB

Объект Python - py.type

type

 

дескриптор функции @py.module.function, только для функций Python

module.function

Передать функцию Python функции карты Python

Передать векторы в Python

Тип входного аргумента MATLAB -
1около-N Вектор

Результирующий тип Python

double

array.array('d')

single

array.array('f')

int8

array.array('b')

uint8

array.array('B')

int16

array.array('h')

uint16

array.array('H')

int32

array.array('i')

uint32

array.array('I')

int64 (Не поддерживается для Python 2.7 в Windows ®)

array.array('q')

uint64 (Не поддерживается для Python 2.7 в Windows)

array.array('Q')

logical

memoryview

char вектор
string скаляр

str

char массив, содержащий значения больше 127 (только версия 2.7)

unicode

cell вектор

tuple

Передача матриц и многомерных массивов в Python

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

  • Фактический тип Python

  • Базовые данные

  • Соответствующая функция преобразования MATLAB. Эта функция используется для полного преобразования объекта Python в массив MATLAB.

Например, предположим, что функция Python вызывается в модуле pyModule возвращает переменную типа pyType с этими значениями:

p = 
  Python pyType:

     8     1     6
     3     5     7
     4     9     2

    Use details function to view the properties of the Python object.

    Use double function to convert to a MATLAB array.

Преобразовать p в матрицу MATLAB P, введите:

P = double(p)
P = 3×3    
     8     1     6
     3     5     7
     4     9     2

Если вам нужна конкретная информация о свойствах Python p, введите:

details(p)
  py.pyModule.pyType handle with properties:

           T: [1×1 py.pyModule.pyType]
        base: [1×1 py.NoneType]
      ctypes: [1×1 py.pyModule.core._internal._ctypes]
        data: [1×3 py.memoryview]
       dtype: [1×1 py.pyModule.dtype]
       flags: [1×1 py.pyModule.flagsobj]
        flat: [1×1 py.pyModule.flatiter]
        imag: [1×1 py.pyModule.pyType]
    itemsize: [1×1 py.int]
      nbytes: [1×1 py.int]
        ndim: [1×1 py.int]
        real: [1×1 py.pyModule.pyType]
       shape: [1×2 py.tuple]
        size: [1×1 py.int]
     strides: [1×2 py.tuple]

  Methods, Events, Superclasses

Если модуль Python предоставляет содержимое в __doc__ , затем MATLAB ссылается на эту информацию.

Использование Python memoryview объекты позволяют Python считывать данные MATLAB без копирования данных MATLAB. Для получения информации о memoryview объекты и протокол буфера, поиск этих терминов по адресу https://www.python.org/doc/.

Сложные и разреженные массивы MATLAB не поддерживаются в Python. См. раздел Неподдерживаемые типы MATLAB.

Устранение ошибок аргумента

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

  1. Проверьте документацию для функции Python и определите ожидаемый тип аргумента.

  2. Создайте объект Python этого типа в MATLAB и передайте его функции Python.

Например, предположим, что следующий код возвращает ошибку.

a = [1 2; 3 4];
py.pyfunc(a)

Если документация pyfunc указывает, что ожидаемый тип: pyType, затем попробуйте выполнить следующее преобразование:

py.pyfunc(pyType(a))

Если ошибка сохраняется, определите основную причину, проверив наличие дополнительных сведений в исключении Python.

Автоматическое преобразование типов Python в типы MATLAB

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

Тип возврата Python, отображаемый в Python

Результирующий тип MATLAB - скалярный

float

double

complex

Комплекс double

int (только версия 2.7).

Для Python версии 3.x int, необходимо преобразовать явным образом. См. раздел Явное преобразование типов Python в типы MATLAB.

int64

bool

logical

Все остальные типы Python - type

Объект Python - py.type

Явное преобразование типов Python в типы MATLAB

Эти функции MATLAB используются для преобразования типов данных Python в типы MATLAB.

Тип возврата Python или протокол, отображаемый в MATLAB

Функция преобразования MATLAB

Примеры

py.str (версия 3.x)

string
char

Использование переменных Python str в MATLAB

py.str (версия 2.7)

string
char
uint8

 

py.unicode

string
char

 

Объект с __str__ метод

char

py.help('datetime.date.__str__')
Help on wrapper_descriptor in datetime.date:

datetime.date.__str__ = __str__(self, /)
    Return str(self).
d = py.datetime.date(...
    int32(2020),int32(3),int32(4));
char(d)
ans = '2020-3-04'

py.bytes

uint8

 

py.int

double
или
int64

 

py.long

double
или
int64

 

py.array.array

Можно преобразовать py.array.array любого формата для требуемого типа MATLAB.

numeric
double
single
int8
uint8
int16
uint16
int32
uint32
int64
uint64

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

Протокол последовательности; например, py.list и py.tuple

cell

Использование переменных списка Python в MATLAB
Использование переменных кортежа Python в MATLAB

протокол картирования; например, py.dict

struct

Использование переменных Python dict в MATLAB

Неподдерживаемые типы MATLAB

Эти типы MATLAB не поддерживаются в Python.

  • Многомерный char или cell множества

  • Структурные массивы

  • Комплексные скалярные целые числа или массивы

  • Разреженные массивы

  • categorical,
    table,
    containers.Map,
    datetime типы

  • Объекты MATLAB

  • meta.class (py.class)

Связанные темы