Пакет 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]]