matlab Пакет Python ® предоставляет классы массивов для представления массивов числовых типов MATLAB ® в качестве переменных Python. Поддерживаются и другие типы MATLAB, перечисленные в разделе Передача данных в MATLAB от Python. Для получения информации об установке matlab Пакет Python, см. раздел Установка пакета Python SDK компилятора MATLAB.
Можно создать числовые массивы MATLAB в сеансе Python, вызвав конструкторы из matlab Пакет Python (например, matlab.double, matlab.int32). Имя конструктора указывает числовой тип MATLAB. Массивы MATLAB можно передавать в качестве входных аргументов функциям MATLAB, вызываемым из Python. Когда функция MATLAB возвращает числовой массив в качестве выходного аргумента, массив возвращается в Python.
Можно инициализировать массив с помощью необязательного initializer входной аргумент, содержащий числа. initializer аргумент должен быть типом последовательности Python, например списком или кортежем. Дополнительное size входной аргумент задает размер инициализированного массива. Для создания многомерных массивов укажите initializer чтобы содержать несколько последовательностей чисел, или укажите size быть многомерным. Можно создать массив комплексных чисел MATLAB, установив необязательный is_complex аргумент ключевого слова для True. mlarray модуль предоставляет конструкторы массива MATLAB, перечисленные в таблице.
Класс от | Вызов конструктора в Python | Числовой тип MATLAB |
|---|---|---|
| matlab.double( initializer=None, size=None, is_complex=False) | Двойная точность |
| matlab.single( initializer=None, size=None, is_complex=False) | Единичная точность |
| matlab.int8( initializer=None, size=None, is_complex=False) | 8-битное целое число со знаком |
| matlab.int16( initializer=None, size=None, is_complex=False) | 16-битное целое число со знаком |
| matlab.int32( initializer=None, size=None, is_complex=False) | 32-разрядное целое число со знаком |
| matlab.int64( initializer=None, size=None, is_complex=False) | 64-битное целое число со знаком |
| matlab.uint8( initializer=None, size=None, is_complex=False) | 8-битное целое число без знака |
| matlab.uint16( initializer=None, size=None, is_complex=False) | 16-битное целое число без знака |
| matlab.uint32( initializer=None, size=None, is_complex=False) | 32-разрядное целое число без знака |
| matlab.uint64( initializer=None, size=None, is_complex=False) | 64-разрядное целое число без знака |
| matlab.logical( initializer=None, size=None)[c] | Логичный |
[а] В Python в Windows, [b] В Python в Windows, [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, созданные с помощью matlab конструкторы пакетов имеют атрибуты и методы, перечисленные в следующей таблице:
Атрибут или метод | Цель |
|---|---|
| Размер массива, возвращенного как кортеж |
| Изменить форму массива, как указано в последовательности |
В Python можно создавать многомерные массивы MATLAB любого числового типа. Используйте два списка поплавков Python для создания массива двойников 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]]
size атрибут A показывает, что это массив 2 на 5.
print(A.size) (2, 5)
Можно индексировать в массивы 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.
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 с помощью reshape способ. Входной аргумент, size, должна быть последовательностью, которая не изменяет количество элементов в массиве. Использовать reshape чтобы измениться 1 9, MATLAB выстраивают к 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]]