exponenta event banner

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

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

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

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

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 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 любого числового типа. Использовать два 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

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

Можно назначить данные фрагменту. Этот код показывает назначение от 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

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

Связанные темы