Пакет matlab Python® обеспечивает классы массивов, чтобы представлять массивы MATLAB® числовые типы как переменные Python. Другие типы MATLAB также поддержаны, как перечислено в Данных о Передаче к MATLAB из Python (MATLAB).
Можно создать числовые массивы MATLAB на сеансе Python путем вызова конструкторов от пакета Python matlab (например, matlab.double, matlab.int32). Имя конструктора указывает на MATLAB числовой тип. Можно передать массивы MATLAB как входные параметры к функциям MATLAB, названным из Python. Когда функция MATLAB возвращает числовой массив как выходной аргумент, массив возвращен в Python.
Можно инициализировать массив с дополнительным входным параметром initializer, который содержит числа. Аргумент initializer должен быть типом последовательности Python, таким как список или кортеж. Дополнительный входной параметр size устанавливает размер инициализированного массива. Чтобы создать многомерные массивы, задайте initializer, чтобы содержать несколько последовательностей чисел или задать size, чтобы быть многомерными. Можно создать массив MATLAB комплексных чисел путем установки дополнительного аргумента ключевого слова is_complex на True. Модуль mlarray предоставляет перечисленных в таблице конструкторов Array 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] | Логический |
Когда вы создаете массив с элементами N, размер 1 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 плаваний, чтобы создать 2 5, массив MATLAB удваивается.
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]]