Пакет matlab
Python® обеспечивает классы массивов, чтобы представлять массивы MATLAB® числовые типы как переменные Python так, чтобы массивы MATLAB могли быть переданы между Python и MATLAB.
Можно создать числовые массивы MATLAB на сеансе Python путем вызова конструкторов от пакета Python matlab
(например, matlab.double
, matlab.int32
). Имя конструктора указывает на MATLAB числовой тип.
Можно использовать пользовательские типы для инициализации двойных массивов MATLAB в Python. Пользовательский тип должен наследовать от Абстрактного базового класса Python collections.Sequence
, который будет использоваться в качестве инициализатора.
Можно передать массивы MATLAB как входные параметры к функциям, вызванным с API MATLAB Engine для Python. Когда функция MATLAB возвращает числовой массив как выходной аргумент, механизм возвращает массив в Python.
Можно инициализировать массив с дополнительным входным параметром initializer
, который содержит числа. initializer
должен быть типом последовательности Python, таким как list
, tuple
или другой тип последовательности. Дополнительный входной параметр size
устанавливает размер массивов от последовательности. Можно создать многомерные массивы путем определения initializer
, чтобы содержать несколько последовательностей чисел, или путем определения size
, чтобы быть многомерными. Можно создать массив MATLAB комплексных чисел путем установки дополнительного входного параметра is_complex
на True
. Пакет matlab
предоставляет перечисленных в таблице конструкторов Array MATLAB.
Класс | Вызов конструктора в Python |
---|---|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
| |
| Никакой конструктор. Когда функция возвращает указатель или объект значения к объекту MATLAB, механизм возвращает |
Когда вы создаете массив с элементами N
, размер 1 N
, потому что это - массив MATLAB.
import matlab.engine A = matlab.int8([1,2,3,4,5]) print(A.size)
(1, 5)
Инициализатором является list
Python, содержащий пять чисел. Размер массивов MATLAB 1 на 5, обозначается tuple
, (1,5)
.
Все массивы MATLAB, созданные с конструкторами пакета matlab
, имеют атрибуты и методы, перечисленные в этой таблице.
Атрибут или метод | Цель |
---|---|
| Размер массива, возвращенного как |
| Изменение размерности массива, как задано последовательностью |
В Python можно создать многомерные массивы MATLAB любого числового типа. Используйте две переменные Python list
, чтобы создать 2 5, массив MATLAB удваивается.
import matlab.engine 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 list
и tuple
.
import matlab.engine 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 list
и tuple
.
import matlab.engine A = matlab.int8([1,2,3,4,5]) print(A[0][1:4])
[2,3,4]
Можно присвоить данные срезу. Этот код показывает присвоение от list
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 ведет себя по-другому по сравнению с разрезанием list
Python. Разрезание массива MATLAB возвращает представление вместо мелкой копии.
Учитывая массив MATLAB и list
Python с теми же значениями, присваивая срез результаты в различных результатах как показано следующим кодом.
A = matlab.int32([[1,2],[3,4],[5,6]]) L = [[1,2],[3,4],[5,6]] A[0] = A[0][::-1] L[0] = L[0][::-1] print(A)
[[2,2],[3,4],[5,6]]
print(L)
[[2, 1], [3, 4], [5, 6]]
Можно изменить размерность массива MATLAB в Python с методом reshape
. size
входного параметра должен быть последовательностью, которая сохраняет число элементов. Используйте reshape
, чтобы измениться 1 9 массив MATLAB к 3х3.
import matlab.engine 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]]