matlab
Python® пакет обеспечивает классы массивов, чтобы представлять массивы MATLAB® числовые типы как переменные Python так, чтобы массивы MATLAB могли быть переданы между Python и MATLAB.
Можно создать числовые массивы MATLAB на сеансе Python путем вызова конструкторов от matlab
Пакет Python (например, 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, механизм возвращает |
[a] В Python 2.7 на Windows, [b] В Python 2.7 на Windows, [c] Logicals не может быть превращен в массив комплексных чисел. |
Когда вы создаете массив с 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 массив типа double 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]]