Массивы MATLAB как переменные Python

The matlab Питон® пакет предоставляет классы массивов, чтобы представлять массивы MATLAB® числовые типы как переменные Python, так что массивы MATLAB могут передаваться между Python и MATLAB.

Создайте массивы MATLAB на Python

Вы можете создать числовые массивы 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, перечисленные в таблице.

matlab Класс

Вызов конструктора на Python

matlab.double

matlab.double(initializer=None, size=None, is_complex=False)

matlab.single

matlab.single(initializer=None, size=None, is_complex=False)

matlab.int8

matlab.int8(initializer=None, size=None, is_complex=False)

matlab.int16

matlab.int16(initializer=None, size=None, is_complex=False)

matlab.int32

matlab.int32(initializer=None, size=None, is_complex=False)

matlab.int64[a]

matlab.int64(initializer=None, size=None, is_complex=False)

matlab.uint8

matlab.uint8(initializer=None, size=None, is_complex=False)

matlab.uint16

matlab.uint16(initializer=None, size=None, is_complex=False)

matlab.uint32

matlab.uint32(initializer=None, size=None, is_complex=False)

matlab.uint64[b]

matlab.uint64(initializer=None, size=None, is_complex=False)

matlab.logical

matlab.logical(initializer=None, size=None)[c]

matlab.object

Конструктора нет. Когда функция возвращает указатель или объект значения объекту MATLAB, механизм возвращает matlab.object на Python.

[a] В Python 2.7 на Windows, matlab.int64 преобразуется в int32 в MATLAB. Кроме того, MATLAB не может вернуть int64 массив на Python.

[b] В Python 2.7 на Windows, matlab.uint64 преобразуется в uint32 в MATLAB. Кроме того, MATLAB не может вернуть uint64 массив на Python.

[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 в Python

Все массивы MATLAB, созданные с помощью matlab конструкторы пакетов имеют атрибуты и методы, перечисленные в этой таблице.

Атрибут или метод

Цель

size

Размер массива, возвращенного как tuple

reshape(size)

Измените форму массива в соответствии с size последовательности

Многомерные массивы MATLAB на Python

В 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

Можно индексировать в массивы 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

Можно срезать массивы 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

Вы можете перестроить массив 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]]

Похожие темы