Массивы MATLAB как переменные Python

The matlab Питон® пакет предоставляет классы массивов, чтобы представлять массивы MATLAB® числовые типы как переменные Python. Также поддерживаются другие типы MATLAB, перечисленные в Pass Data to MATLAB от Python. Для получения информации об установке matlab Пакет Python, см. Установка пакета MATLAB Compiler SDK Python.

Создайте массивы MATLAB на Python

Вы можете создать числовые массивы MATLAB в сеансе Python, вызывая конструкторы из matlab Пакет Python (для примера, matlab.double, matlab.int32). Имя конструктора указывает числовой тип MATLAB. Можно передать массивы MATLAB в качестве входных параметров в функции MATLAB, вызываемые из Python. Когда функция MATLAB возвращает числовой массив в качестве выходного аргумента, массив возвращается на Python.

Можно инициализировать массив с помощью дополнительного initializer входной параметр, который содержит числа. The initializer аргумент должен быть типом последовательности Python, таким как список или кортеж. Необязательный size входной параметр устанавливает размер инициализированного массива. Чтобы создать многомерные массивы, задайте initializer содержать несколько последовательностей чисел или задавать size быть многомерным. Можно создать массив комплексных чисел MATLAB путем установки дополнительного is_complex аргумент ключевого слова для True. The mlarray модуль содержит конструкторы массивов MATLAB, перечисленные в таблице.

Класс из matlab Пакет

Вызов конструктора на Python

Числовой тип MATLAB

matlab.double

matlab.double(
initializer=None,
size=None,
is_complex=False)

Двойная точность

matlab.single

matlab.single(
initializer=None,
size=None,
is_complex=False)

Одинарная точность

matlab.int8

matlab.int8(
initializer=None,
size=None,
is_complex=False)

8-битное целое число со знаком

matlab.int16

matlab.int16(
initializer=None,
size=None,
is_complex=False)

16-битное целое число со знаком

matlab.int32

matlab.int32(
initializer=None,
size=None,
is_complex=False)

32-битное целое число со знаком

matlab.int64[a]

matlab.int64(
initializer=None,
size=None,
is_complex=False)

64-битное целое число со знаком

matlab.uint8

matlab.uint8(
initializer=None,
size=None,
is_complex=False)

8-битное беззнаковое целое число

matlab.uint16

matlab.uint16(
initializer=None,
size=None,
is_complex=False)

16-битное беззнаковое целое число

matlab.uint32

matlab.uint32(
initializer=None,
size=None,
is_complex=False)

32-битное беззнаковое целое число

matlab.uint64[b]

matlab.uint64(
initializer=None,
size=None,
is_complex=False)

64-битное беззнаковое целое число

matlab.logical

matlab.logical(
initializer=None,
size=None)[c]

Логичный

[a] В Python в Windows, matlab.int64 преобразуется в int32 в MATLAB. Кроме того, MATLAB не может вернуть int64 массив на Python.

[b] В Python в Windows, matlab.uint64 преобразуется в uint32 в MATLAB. Кроме того, MATLAB не может вернуть uint64 массив на Python.

[c] Логики не могут быть сделаны в массив комплексных чисел.

Когда вы создаете массив с N элементы, размер 1-by- N потому что это массив MATLAB.

import matlab
A = matlab.int8([1,2,3,4,5])
print(A.size)

(1, 5)

Инициализатор представляет собой список Python, содержащий пять чисел. Размер массива MATLAB 1 на 5, обозначенный кортежем (1,5).

Атрибуты и методы массива MATLAB в Python

Все массивы MATLAB, созданные с помощью matlab конструкторы пакетов имеют атрибуты и методы, перечисленные в следующей таблице:

Атрибут или метод

Цель

size

Размер массива, возвращенного как кортеж

reshape(size)

Измените форму массива так, как задано в последовательности size

Многомерные массивы MATLAB на Python

В Python можно создать многомерные массивы MATLAB любого числового типа. Используйте два списка Python с плавающей точкой для создания массива типа double MATLAB 2 на 5.

import matlab
A = matlab.double([[1,2,3,4,5], [6,7,8,9,10]])
print(A)

[[1.0,2.0,3.0,4.0,5.0],[6.0,7.0,8.0,9.0,10.0]]

The size атрибут A показывает массив 2 на 5.

print(A.size)

(2, 5)

Индекс в массивы MATLAB на Python

Можно индексировать в массивы MATLAB так же, как можно индексировать в списки Python и кортежи.

import matlab
A = matlab.int8([1,2,3,4,5])
print(A[0])

[1,2,3,4,5]

Размер массива MATLAB (1,5); поэтому A[0] является [1,2,3,4,5]. Индексируйте в массив, чтобы получить 3.

print(A[0][2])

3

Индексация Python основана на нуле. Когда вы получаете доступ к элементам массивов MATLAB в сеансы Python, используйте индексацию с нулем.

В этом примере показано, как индексировать в многомерный массив MATLAB.

A = matlab.double([[1,2,3,4,5], [6,7,8,9,10]])
print(A[1][2])

8.0

Срез массивов MATLAB на Python

Можно срезать массивы MATLAB так же, как можно срезать списки Python и кортежи.

import matlab
A = matlab.int8([1,2,3,4,5])
print(A[0][1:4])

[2,3,4]

Можно назначить данные срезу. В этом примере показано назначение из списка Python массиву.

A = matlab.double([[1,2,3,4],[5,6,7,8]])
A[0] = [10,20,30,40]
print(A)

[[10.0,20.0,30.0,40.0],[5.0,6.0,7.0,8.0]]

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

Можно задать срезы для назначения, как показано в этом примере.

A = matlab.int8([1,2,3,4,5,6,7,8])
A[0][2:4] = [30,40]
A[0][6:8] = [70,80]
print(A)

[[1,2,30,40,5,6,70,80]]

Примечание

Срезание массивов MATLAB ведет себя по-другому по сравнению с срезанием списка Python. Срезание массива MATLAB возвращает представление вместо неглубокой копии.

Учитывая массив MATLAB и список Python с одинаковыми значениями, назначение среза приводит к разным результатам.

>>>mlarray = matlab.int32([[1,2],[3,4],[5,6]])
>>>py_list = [[1,2],[3,4],[5,6]]
>>>mlarray[0] = mlarray[0][::-1]
>>>py_list[0] = py_list[0][::-1]
>>>mlarray[0]
matlab.int32([[2,2],[3,4],[5,6]])
>>>py_list
[[2,1],[3,4],[5,6]]

Изменение структуры массивов MATLAB на Python

Вы можете перестроить массив MATLAB на Python с помощью reshape способ. Входной параметр, size, должна быть последовательностью, которая не изменяет количество элементов в массиве. Использование reshape для изменения массива MATLAB 1 на 9 на 3х3.

import matlab
A = matlab.int8([1,2,3,4,5,6,7,8,9])
A.reshape((3,3))
print(A)

[[1,4,7],[2,5,8],[3,6,9]]

Похожие темы