The matlab
Питон® пакет предоставляет классы массивов, чтобы представлять массивы MATLAB® числовые типы как переменные Python. Также поддерживаются другие типы MATLAB, перечисленные в Pass Data to MATLAB от Python. Для получения информации об установке matlab
Пакет Python, см. Установка пакета MATLAB Compiler SDK 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, перечисленные в таблице.
Класс из | Вызов конструктора на 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] | Логичный |
[a] В 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 с плавающей точкой для создания массива типа 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 и кортежи.
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
для изменения массива 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]]