exponenta event banner

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

matlab Пакет Python ® предоставляет классы массивов для представления массивов числовых типов MATLAB ® в качестве переменных Python. Поддерживаются и другие типы MATLAB, перечисленные в разделе Передача данных в MATLAB от Python. Для получения информации об установке matlab Пакет Python, см. раздел Установка пакета Python SDK компилятора MATLAB.

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

Можно создать числовые массивы MATLAB в сеансе Python, вызвав конструкторы из matlab Пакет Python (например, matlab.double, matlab.int32). Имя конструктора указывает числовой тип MATLAB. Массивы MATLAB можно передавать в качестве входных аргументов функциям MATLAB, вызываемым из Python. Когда функция MATLAB возвращает числовой массив в качестве выходного аргумента, массив возвращается в Python.

Можно инициализировать массив с помощью необязательного initializer входной аргумент, содержащий числа. initializer аргумент должен быть типом последовательности Python, например списком или кортежем. Дополнительное size входной аргумент задает размер инициализированного массива. Для создания многомерных массивов укажите initializer чтобы содержать несколько последовательностей чисел, или укажите size быть многомерным. Можно создать массив комплексных чисел MATLAB, установив необязательный is_complex аргумент ключевого слова для True. mlarray модуль предоставляет конструкторы массива MATLAB, перечисленные в таблице.

Класс от matlab Пакет

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

Числовой тип MATLAB

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)

8-битное целое число со знаком

matlab.int16

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

16-битное целое число со знаком

matlab.int32

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

32-разрядное целое число со знаком

matlab.int64[a]

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

64-битное целое число со знаком

matlab.uint8

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

8-битное целое число без знака

matlab.uint16

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

16-битное целое число без знака

matlab.uint32

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

32-разрядное целое число без знака

matlab.uint64[b]

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

64-разрядное целое число без знака

matlab.logical

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

Логичный

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

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

[c] Логики не могут быть объединены в массив комплексных чисел.

При создании массива с помощью N элементы, размер 1-by-N потому что это массив MATLAB.

import matlab
A = matlab.int8([1,2,3,4,5])
print(A.size)

(1, 5)

Инициализатор представляет собой список Python, содержащий пять чисел. Размер массива MATLAB - 1 на 5, обозначается кортежем (1,5).

Атрибуты и методы массива MATLAB в Python

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

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

Цель

size

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

reshape(size)

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

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

В Python можно создавать многомерные массивы MATLAB любого числового типа. Используйте два списка поплавков Python для создания массива двойников MATLAB 2 на 5.

import matlab
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.

import matlab
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.

import matlab
A = matlab.int8([1,2,3,4,5])
print(A[0][1:4])

[2,3,4]

Можно назначить данные фрагменту. В этом примере показано назначение массива из списка 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 ведет себя иначе, чем разрезание списка Python. При разделении массива MATLAB вместо неглубокой копии возвращается представление.

Задание массива MATLAB и списка Python с одинаковыми значениями приводит к различным результатам.

>>>mlarray = matlab.int32([[1,2],[3,4],[5,6]])
>>>py_list = [[1,2],[3,4],[5,6]]
>>>mlarray[0] = mlarray[0][::-1]
>>>py_list[0] = py_list[0][::-1]
>>>mlarray[0]
matlab.int32([[2,2],[3,4],[5,6]])
>>>py_list
[[2,1],[3,4],[5,6]]

Изменение структуры массивов MATLAB в Python

Можно изменить форму массива MATLAB в Python с помощью reshape способ. Входной аргумент, size, должна быть последовательностью, которая не изменяет количество элементов в массиве. Использовать reshape чтобы измениться 1 9, MATLAB выстраивают к 3 на 3.

import matlab
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]]

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