Передача данных Python

Тип MATLAB к Отображению типа в Python

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

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

Получившийся Python тип py.

double
single

float

Комплексный single
Комплексный double

complex

int8
uint8
int16
uint16
int32

int

uint32
int64
uint64

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

NaN

float(nan)

Inf

float(inf)

скаляр строки
Вектор char

str

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

None

logical

bool

Структура

dict

Объект Python — py.type

type

указатель на функцию @ py.module.function, к Python функционирует только

module.function

Вектор MATLAB к отображению Python

Тип входного параметра MATLAB —
1-by-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')

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

unicode

logical

memoryview

Вектор char
скаляр строки

str

Вектор cell

tuple

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

Когда вы передаете действительные числовые или логические массивы функции 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.

Связанные примеры

Больше о