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

 

указатель на функцию @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')

logical

memoryview

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

str

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

unicode

cell вектор

tuple

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

Когда вы передаете действительные числовые или логические массивы функции Python, MATLAB автоматически преобразует данные в memoryview Python объект. Если выход функции 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Ввод

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

Похожие темы