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