The matlab
Питон® пакет предоставляет классы массивов, чтобы представлять массивы MATLAB® числовые типы как переменные Python, так что массивы MATLAB могут передаваться между Python и MATLAB.
Вы можете создать числовые массивы MATLAB в сеансе Python, вызывая конструкторы из matlab
Пакет Python (для примера, matlab.double
, matlab.int32
). Имя конструктора указывает числовой тип MATLAB.
Можно использовать пользовательские типы для инициализации двойных массивов MATLAB на Python. Пользовательский тип должен наследовать от абстрактного базового класса Python collections.Sequence
для использования в качестве инициализатора.
Можно передать массивы MATLAB в качестве входных параметров в функции, вызываемые с помощью MATLAB Engine API для Python. Когда функция MATLAB возвращает числовой массив в качестве выходного аргумента, механизм возвращает массив на Python.
Можно инициализировать массив с помощью дополнительного initializer
входной параметр, который содержит числа. initializer
должен быть типом последовательности Python, таким как list
, tuple
, или другого типа последовательности. Необязательный size
входной параметр устанавливает размер массива из последовательности. Можно создать многомерные массивы путем определения initializer
содержать несколько последовательностей чисел или путем определения size
быть многомерным. Можно создать массив комплексных чисел MATLAB путем установки дополнительного is_complex
входной параметр в True
. The matlab
В пакете представлены конструкторы массивов MATLAB, перечисленные в таблице.
| Вызов конструктора на Python |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Конструктора нет. Когда функция возвращает указатель или объект значения объекту MATLAB, механизм возвращает |
[a] В 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 любого числового типа. Используйте два list
Python переменные для создания массива типа double 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]]
The 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
для изменения массива MATLAB 1 на 9 на 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]]