MATLAB к отображению типа данных Python

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

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

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

Получившийся Python py. Ввод

Примеры

double действительный
single действительный

float

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

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

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

 

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

moduleфункция

Передача Функции 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')

double комплекс
single комплекс
int8 комплекс
uint8 комплекс
int16 комплекс
uint16 комплекс
int32 комплекс
uint32 комплекс

memoryview

logical

memoryview

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

str

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

unicode

cell вектор

tuple

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

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

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

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

  • Соответствующая функция преобразования MATLAB. Используйте эту функцию, чтобы полностью преобразовать объект Python в массив MATLAB.

Например, создайте файл test.py содержа этот код:

def returnData(data):
   return data

Передать массив MATLAB returnDataВвод:

m = magic(3);
p = py.test.returnData(m)

Преобразовывать p к матрице MATLAB PВвод:

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

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

details(p)
  py.test.memoryview handle with properties:

           T: [1×1 py.test.memoryview]
        base: [1×1 py.NoneType]
      ctypes: [1×1 py.test.core._internal._ctypes]
        data: [1×3 py.memoryview]
       dtype: [1×1 py.test.dtype]
       flags: [1×1 py.test.flagsobj]
        flat: [1×1 py.test.flatiter]
        imag: [1×1 py.test.memoryview]
    itemsize: [1×1 py.int]
      nbytes: [1×1 py.int]
        ndim: [1×1 py.int]
        real: [1×1 py.test.memoryview]
       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Ввод

Явным образом преобразуйте типы 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
memoryview

Можно преобразовать py.array.array из любого формата и memoryview объекты к типу 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Класс)

Похожие темы