Powersys — Модули EMTP-RV
Дополнительные модули для EMTP-RV позволяют расширить возможности системы и связать ее с пакетом Simulink
Новый модуль Simulink Toolbox позволяет импортировать в EMTP-RV модели, разработанные в Simulink в независимости от их сложности за считанные минуты. Для работы модуля необходимы Matlab/Simulink и следующие модули: Matlab Coder, Simulink Coder, Embedded Coder. Модели из Simulink транслируются в DLL файлы и затем импортируются в EMTP-RV с поддержкой всех входных и выходных портов для связи с другими компонентами. Помимо этого, поддерживаются вектора, комплексные сигналы и внешние параметры, значения которых можно задавать в EMTP-RV.
Модуль PAMSuite позволяет исследовать влияние различных параметров на выходные характеристики моделируемых систем. Модуль включает в себя блоки для проведения моделирования методом Монте-Карло, анализа чувствительности, исследования вариантов реагирования на непредвиденные ситуации, а также блок оптимизации и калибровки моделей. Все расчеты автоматически распараллеливаются с учетом максимально доступного числа ядер.
LIOV-EMTP – модуль, предназначенный для расчета перегрузок в воздушных электрических сетях, вызванных ударами молний. Модуль LIOV (Lightning-Induced OverVoltage) позволяет осуществлять расчеты для многопроводниковых линий в зависимости от их положения над поверхностью, их геометрии и положения удара. Помимо этого, модуль позволяет рассчитывать электрические параметры почвы под линиями передач и скорость обратного удара.
Данный модуль разрабатывался исследователями из различных организаций, включая Болонский университет и Федеральную политехническую школу Лозанны, а также Римский университет Ла Сапиенца и итальянскую компанию Centro Elettrotecnico Sperimentale Italiano “G. Motta” CESI S.p.A. Результаты, полученные при расчетах с использованием модуля LIOV, согласуются с различными экспериментальными данными.
Новый модуль, предназначенный для моделирования и анализа защитных систем как во временной, так и в частотных областях. Моделируемы системы могут состоять из произвольного числа компонентов, включая, например, силовые машины, высоковольтные передачи и ветровые генераторы.
Особенностью данного модуля также является возможность моделирования источников возобновляемой энергии. Пользователь получает возможность исследовать самые разнообразные процессы, например, качание мощности в энергосистеме, моделировать дистанционную релейную защиту, перерывы в подаче тока из-за токоограничивающих предохранителей и многое другое.
Новая библиотека содержит 30 стандартных моделей регуляторов, возбудителей и стабилизаторов. Она включает в себя модели, которые согласуются со стандартом IEEE 421.5-2005 “IEEE Recommended Practice for Excitation System Models for Power System Models for Power System Stability Studies”. Все модели импортируются в EMTP-RV буквально за одно нажатие. Для каждого компонента в библиотеке также доступно подробное описание.
Компания БазисСофт является эксклюзивным представителем Powersys на территории России и СНГ!- Главная
- Продукты
- Лицензирование
- Мероприятия
- Купить
EMTP | |
EMTP приложения |
Ближайшие мероприятия:
Приглашаем Вас на ближайшие мероприятия!
используем MATLAB и Python вместе / Хабр
В этом материале расскажу, как использовать MATLAB и Python вместе (в мире и гармонии). Эти два языка часто используются вместе для разработки приложений ИИ (настолько часто, что существуют прямой импорт и экспорт для сетей глубокого обучения через MATLAB, ONNX и TensorFlow). Вот несколько хороших примеров совместного использования MATLAB и Python: приложения для прогнозирования качества воздуха и алгоритм анализа настроения.
Основы
Во-первых, давайте разберемся с требованиями. Нам понадобится последняя версия Python и MATLABR 2014b или более поздняя. Проверьте здесь конкретную версию.
Это может показаться очевидным, но также необходимо позаботиться о том, чтобы наш код был доступен как для MATLAB, так и для Python. Путь к программным дистрибутивам можно легко обновить с обоих языков.
Вызов Python из MATLAB
Прежде всего, убедимся, что MATLAB может найти интерпретатор Python. Мы можем сделать это в MATLAB с функцией pyenv:
>> pyenv ans = PythonEnvironment with properties: Version: "3.6" Executable: "C:\Python36\WPy-3670\python-3.6.7.amd64\python.EXE" Library: "C:\Python36\WPy-3670\python-3.6.7.amd64\python36.dll" Home: "C:\Python36\WPy-3670\python-3.6.7.amd64" Status: Loaded ExecutionMode: OutOfProcess ProcessID: "20980" ProcessName: "MATLABPyHost"
Последнее возвратило версию Python и настройки среды, которые также можно изменить с помощью функции pyenv.
Теперь, когда у нас есть доступ к Python, приступим к делу. Мы попробуем функцию sqrt из математической библиотеки, чтобы понять ее. В Python мы вызываем ее так:
>>> import math >>> math.sqrt(42) 6.48074069840786
Чтобы вызвать ту же функцию Python из MATLAB, мы можем использовать следующее:
>> py.math.sqrt(42) ans = 6.480740698407860
Мы использовали format long для отображения той же точности в MATLAB и Python.
Доступ к модулям и функциям Python осуществляется с помощью следующего синтаксиса:
>> py.module_name.function_name
Таким же образом вызываются пользовательские модули. Например, модуль weather.py в приложении air qualityapp включает функции, которые считывают данные о погоде для данного местоположения через web-API:
>> data = py.weather.get_current_weather("Boston","US",key) data = Python dict with no properties. {'coord': {'lon': -71.06, 'lat': 42.36}, 'weather': [{'id': 804, 'main': 'Clouds', 'description': 'overcast clouds', 'icon': '04n'}], 'base': 'stations', 'main': {'temp': 53.2, 'feels_like': 34.9, 'temp_min': 51.01, 'temp_max': 55, 'pressure': 1003, 'humidity': 46}, 'visibility': 16093, 'wind': {'speed': 26.4, 'deg': 230, 'gust': 34.45}, 'clouds': {'all': 90}, 'dt': 1587342601, 'sys': {'type': 1, 'id': 3486, 'country': 'US', 'sunrise': 1587290159, 'sunset': 1587339006}, 'timezone': -14400, 'id': 4930956, 'name': 'Boston', 'cod': 200}
Обратите внимание, что на выходе получается словарь Python (в MATLAB). Мы могли бы преобразовать его в тип MATLAB (подробнее о типах данных далее), но пока мы продолжим работать с ним напрямую. Давайте извлечем интересующую информацию с помощью другой функции из модуля:
>> weatherData = py.weather.parse_current_json(data) data = Python dict with no properties. {'temp': 39.31, 'feels_like': 31.44, 'temp_min': 37, 'temp_max': 41, 'pressure': 1010, 'humidity': 80, 'speed': 8.05, 'deg': 340, 'city': 'Boston', 'lat': 42.36, 'lon': -71.06, 'current_time': '2020-04-18 20:48:00.985146'}
Мы также можем индексировать в словаре, чтобы вспомнить конкретные значения:
>> T = weatherData{"temp"} T = 39.3100
Обратите внимание, что мы использовали фигурные скобки {} вместо круглых скобок (). В MATLAB фигурные скобки часто используются при доступе к значениям из разнородных типов данных, таких как массивы ячеек и таблицы. Легкий способ запомнить: когда вы используете (), вы получаете подмножество большего набора данных того же типа, то есть массив ячеек или таблицу. И наоборот, если вы используете {}, вы получите индексированное значение в исходном типе данных, то есть double, string, character. Следовательно, в приведенном выше примере dict – это гетерогенный тип данных, и мы будем использовать {}, чтобы получить значение температуры как двойное. В этом примере показано индексирование в Python dict.
Теперь, когда мы получили представление о синтаксисе, давайте поговорим еще об одном различии в вызове функций. Скажем, хотели изменить единицы измерения погодных данных. В Python функция get_forecast принимает аргументы ключевого слова standard Python, как показано в последнем аргументе здесь:
>>> forecast = weather.get_forecast("Boston","US",key,units="metric")
В MATLAB они передаются как пары имя-значение с функцией pyargs:
>> forecast = py.weather.get_forecast("Boston","US",key,pyargs("units","metric")
Теперь, когда мы понимаем, как адаптировать синтаксис Python и вызывать функции из MATLAB, давайте попробуем по- другому.
Вызов MATLAB из Python
API MATLAB Engine для Python позволяет вызывать MATLAB в качестве механизма вычислений, поэтому мы можем использовать функции MATLAB из Python. Во-первых, нам нужно установить его через пакет Python, входящий в состав MATLAB. Выполните следующие команды в командной строке ОС:
$ cd "matlabroot/extern/engines/python" $ python setup.py install
«Matlabroot» – это каталог, в котором установлен MATLAB (проверьте, вызвав >> matlabroot в MATLAB). Здесь можно посмотреть дополнительную информацию.
А теперь приступим к самому интересному. Чтобы вызвать функции MATLAB из Python, сначала импортируйте и запустите движок (мы также могли бы использовать текущий сеанс MATLAB, если он уже запущен):
>>> import matlab.engine >>> eng = matlab.engine.start_matlab()
Теперь, когда engine запущен, давайте вызовем функцию извлечения квадратного корня:
>>> x = eng.sqrt(42.0) 6.48074069840786
Обратите внимание, что мы вызываем функцию sqrt с 42.0, а не просто с 42. Подробнее об этом расскажем дальше.
Функции MATLAB вызываются с их собственным синтаксисом, но есть некоторые отчетливые различия. Одно из отличий заключается в способе захвата нескольких выходных данных. Например, в алгоритме анализа настроения код MATLAB возвращает несколько выходных данных. Мы можем указать количество выходов с помощью nargout:
>>> [sentiment,scores] = eng.sentimentAnalysis(text,nargout=2) Positive [[0.0,0.510948896408081,0.48905110359191895]]
Точно так же, если функция MATLAB не возвращает выходных данных (скажем, функция записывает результаты в файл), вам нужно передать nargout = 0.
Когда мы закончим, мы должны остановить движок MATLAB, чтобы освободить системные ресурсы:
>>> eng.exit()
Чтобы вызвать операторов MATLAB (например, известный оператор обратный слэш «\» для решения линейных систем уравнений), нам нужно использовать имя функции (mldivide). Вот полный список операторов MATLAB и связанных функций.
Конвертация типов данных
Когда мы ранее вызывали sqrt, мы использовали 42 в MATLAB, но 42.0 в Python. В чем разница?
Ввод 42 возвращает двойное значение в MATLAB и целое число в Python.
В нашем примере с квадратным корнем ошибки были бы выполнены без использования функции преобразования ввода (42) или ввода 42.0, поскольку sqrt в MATLAB принимает одинарные, двойные или сложные типы.>>> eng.sqrt(42.0) 6.48074069840786 >>> eng.sqrt(float(42)) 6.48074069840786
Мы также можем использовать целочисленные и другие функции преобразования типов (показанные в таблице ниже) в MATLAB для передачи ожидаемых типов в функции Python.
Это касается входов, но как насчет выходов? Мы уже видели несколько примеров: в MATLAB sqrt вернул значение типа double, но функции в weather.py вернули объекты словаря Python. Так что же происходит? Там где это возможно, выходные данные функции будут представлены соответствующим типом на этом языке. В противном случае мы можем преобразовать данные в соответствующие типы.
В таблице ниже показаны сопоставления для общих типов данных (полный список тут).
Некоторые специализированные типы данных MATLAB, такие как timetable или categorical, потребуют некоторого дополнительного внимания и должны быть преобразованы вручную. Конечно, мы все еще можем использовать эти типы данных в наших функциях, но функции должны возвращать типы, которые интерпретатор Python может понять.
Если все эти передачи данных и преобразования между MATLAB и Python выглядят слишком муторными, хочу вас успокоить, этого часто можно избежать, если спланировать совместное использование заранее. Например, в алгоритме анализа настроения аудиоданные импортируются как целые числа (вместо двойного по умолчанию), которые затем напрямую передаются в функцию Python.
Файлы также часто используются для передачи данных, особенно при совместной работе между группами и разными языками. Если наши данные являются табличными, мы можем использовать Apache Parquet для передачи данных между двумя языками. MATLAB использует Apache Arrow для эффективного чтения и записи данных в Parquet. Мы можем читать данные, выполнять вычисления и записывать данные в Parquet с нескольких поддерживаемых языков.
Это обычный конвейер для работы с большими наборами данных, который помогает избежать копирования и лишних трат времени при преобразовании (Подробнее тут).
Обработка ошибок
До сих пор мы говорили о том, как избежать ошибок, теперь обсудить как интерпретировать сообщения об ошибках, на случай если избежать их не удалось. Есть несколько отличных страниц документации по устранению распространенных проблем, таких как ошибки Python из MATLAB и ошибки MATLAB из Python.
Но нам бы пришлось потратить весь день разбираясь как читать сообщения об ошибках, думаю, полезней будет научиться определять откуда исходит ошибка от MATLAB или от Python. Если мы посмотрим на сообщение об ошибке, мы увидим указание на то, где возникла ошибка.
Давайте снова вызовем sqrt, но с неправильным типом данных:
>> py.math.sqrt("42") Python Error: TypeError: must be real number, not str
В MATLAB мы видим ошибку Python в начале строки, за которой следует ошибка, вызванная Python, что упрощает отладку! MATLAB перехватил исключение Python и повторно выбросил его как исключение MATLAB exception, содержащее то же сообщение.
Сделаем то же самое из Python:
>>> eng. sqrt("42") Traceback (most recent call last): ... MatlabExecutionError: Undefined function 'sqrt' for input arguments of type 'char'.
Здесь минимизирована обратная трассировка Python, но если мы посмотрим на последнюю строку, мы увидим MatlabExecutionError и сообщение об ошибке MATLAB. Исключение MATLAB было поймано и повторно вызвано как исключение Python с тем же сообщением.
Мы сохраняем простоту, но есть более изощренные способы перехвата исключений, которые могут быть полезны для тестирования и совместного использования приложений. Подробнее читайте здесь.
Создание Python Packages из MATLAB Code
Пока мы обсудили только использование MATLAB из Python и наоборот, предполагая, что оба языка установлены на одном компьютере. Как быть если мы хотим поделиться своей работой с теми, у кого не установлен MATLAB? Для этого можно использовать MATLAB Compiler SDK, который позволит нам упаковать код MATLAB и вспомогательные файлы на других языках.
В примере с приложением прогнозирующим качества воздуха этот процесс используется для создания пакета Python из функции MATLAB prediction, predAirQual. m. Мы можем использовать приложение компилятора библиотеки и выбрать функцию(и) для включения (зависимости обнаруживаются автоматически).
Приложение упаковывает необходимые нам файлы и создает файлы setup.py и readme.txt с инструкциями в Python.
Чтобы вызвать это в Python, существует этап установки, аналогичный процессу для MATLAB Engine API (инструкции здесь), с использованием сгенерированного файла setup.py.
Затем нам нужно импортировать и инициализировать пакет и вызывать функции, например:
>>> import AirQual >>> aq = AirQual.initialize() >>> result = aq.predictAirQual()
После окончания необходимо завершить процесс:
>>> aq.terminate()
Пример с приложением для прогнозирования качества воздуха идет на один шаг дальше в совместном использовании функциональности MATLAB в веб-интерфейсе. В этом случае производственный сервер MATLAB может использоваться для балансировки нагрузки, а к коду MATLAB можно получить доступ через RESTful API или Pythonclient.
Интересные видео по теме:
Using MATLAB with Python (здесь подробнее разбирается упомянутый в материале пример приложения для прогнозирования качества воздуха)
How to Call Python from MATLAB
How to Call MATLAB from Python
Matlab — MATLAB и Simulink
Matlab
Модуль Python Matlab
Модуль Python ® предоставляет классы массивов для представления массивов числовых типов MATLAB ® в виде переменных Python, чтобы массивы MATLAB можно было передавать между Python и MATLAB.
Классы MATLAB в
Matlab
Модуль PythonВы можете использовать числовые массивы MATLAB в коде Python, импортировав
пакет Matlab
Python и вызов необходимых конструкторов. Например:импортировать матлаб a = matlab.double([[1, 2, 3],[4, 5, 6]])
Имя конструктора указывает числовой тип MATLAB. Вы можете передать массивы MATLAB в качестве входных параметров функциям MATLAB, вызываемым из Python. Когда функция MATLAB возвращает числовой массив в качестве выходного аргумента, массив возвращается в Python.Вы можете инициализировать массив с помощью дополнительного ввода инициализатора
аргумент инициализатора
должен быть тип последовательности Python, такой как списоккортеж
или диапазонинициализатор
, содержащий несколько последовательностей чисел.Вы можете инициализировать массив с необязательным входным аргументом
vector
, который содержит входные данные размера 1 на N. Если вы используете вектор, вы не можете использовать инициализатор
Вы можете создать многомерный массив, используя один из следующих вариантов:
Укажите вложенную последовательность без указания размера.
Укажите вложенную последовательность, а также укажите размер
Укажите одномерную последовательность вместе с многомерной размер. В этом случае предполагается, что последовательность представляет собой элементы в порядке столбцов.
Вы можете создать массив MATLAB комплексных чисел, установив необязательный
is_complex
аргумент ключевого слова дляПравда
.Вы можете использовать пользовательские типы для инициализации массивов MATLAB в Python. Пользовательский тип должен реализовывать протокол буфера Python. Одним из примеров является
ndarray
в NumPy.
Класс из | Вызов конструктора в Python | Примеры |
---|---|---|
| matlab.double (инициализатор = нет | вектор = Никто, размер = нет, is_complex=False) | >>> a = matlab.double(4) >>> b = matlab.double(vector=[11, 22, 33]) >>> c = matlab.double ([[10, 20],[30,40]]) >>> d = matlab.double(initializer=[[10, 20],[30,40]], size=[2,2],is_complex=False) >>> e = matlab.double (вектор = диапазон (0, 20)) >>> f = matlab.double (vector = [x * x для x в диапазоне (0, 10, 2)]) >>> g = matlab.double([[1.1+2.4j, 3+4j],[5.3,6.7]], is_complex=True) |
| matlab.single (инициализатор = нет | вектор = нет, размер = нет, is_complex=False) | >>> a = matlab.single([[1.1, 2.2, 3.3],[4.4, 5.5, 6.6]]) >>> a = matlab.single(vector=[11 , 22, 33], is_complex=False) |
| matlab.int8(initializer=None|vector=None, размер = нет, is_complex=False) | >>> a = matlab.int8([[11, 22, 33],[44, 55, 66]]) >>> a = matlab.int8(vector=[11, 22, 33], is_complex=False) |
| 9002 4 matlab.int16 (инициализатор = нет | вектор = Никто, размер = нет, is_complex=False) | >>> e = matlab.int16([[1+2j, 3+4j],[-5,6]], is_complex=True) |
| matlab.int32 (инициализатор = нет | вектор = нет, размер = нет, is_complex=ложь) | >>> a = matlab.int32(initializer=[[11, 22, 33],[44, -55, 66]], size=[2,3], is_complex=False) |
| matlab.int64 (инициализатор = нет | вектор = нет, размер = нет, is_complex=False) | >>> a = matlab.int64([[11, 22, 33],[44, -55, 66]]) |
| matlab.uint8 (инициализатор = Нет | вектор = Нет, размер = нет, is_complex=ложь) | >>> a = matlab.uint8([[11, 22, 33],[44, 55, 66]]) >>> b = matlab.uint8(vector=[11, 22, 33 ], is_complex=False) |
| matlab.uint16(initializer=None|vector=None, размер = нет, is_complex=False) | >>> a = matlab.uint16(initializer=[[11, 22, 33],[44, 55, 66]], size=[2,3], is_complex=False) >>> b = matlab.uint16(vector=[11, 22, 33], is_complex=False) >>> c = matlab.uint16([[11, 22, 33],[44, 55, 66]]) |
| 9011 4>>> a = matlab.uint32(vector=[11, 22, 33], is_complex=False) >>> b = matlab.uint32([[11, 22, 33] ,[44, 55, 66]]) | |
| matlab.uint64 (инициализатор = нет | вектор = нет, размер = нет, is_complex=False) | >>> a = matlab.uint64([[11, 22, 33],[44, 55, 66]]) >>> b = matlab.uint64(vector=[11 , 22, 33], is_complex=False) |
| matlab.logical(initializer=None|vector=None, size=None) a | >>> a = matlab.logical(initializer=[[True, False, True],[True, True, True]], size=[2,3]) >>> b = matlab.logical([[True, False, True],[True, True, True]]) >>> c = matlab.logical(vector=[True, False, True]) >>> d = matlab.logical([True, False, True]) |
a Логические числа нельзя преобразовать в массив комплексных чисел. |
Свойства и методы классов MATLAB в пакете
Matlab
Python Все массивы MATLAB, созданные с помощью матлаб
пакет
конструкторы имеют следующие свойства и методы:
Свойства
Имя свойства | Описание | Пример s |
---|---|---|
| Кортеж целых чисел, представляющий размеры массив | >>> a = matlab. int16([[1, 2, 3],[4, 5, 6]]) >>> а.размер (2, 3) |
| Целое число, представляющее размер в байтах элемента массив | >>> a = matlab.int16() >>> a.itemsize 2 >>> b = matlab.int32() >>> b.размер элемента 4 |
Методы
Название метода | Назначение | Примеры |
---|---|---|
clone() | Возвращает новый отдельный объект с содержимым, идентичным содержимое исходного объекта | >>> a = matlab.int16( [[1, 2, 3], [4, 5, 6]]) >>> b = a.clone() >>> печатать(б) [[1,2,3],[4,5,6]] >>> б[0][0] = 100 >>> б матлаб.int16( [[100,2,3],[4,5,6]]) >>> напечатать(а) [[1,2,3],[4,5,6]] |
real() | Возвращает действительные части элементов, являющихся комплексными числами, в порядок столбцов в виде массива 1 на N | >>> a = matlab. int16([[1 + 10j, 2 + 20j, 3 + 30j], [4, 5, 6]], is_complex=Истина) >>> печать (a.real()) [1,4,2,5,3,6] |
изображение() | Возвращает мнимые части элементов, являющихся комплексными числами, в порядок столбцов в виде массива 1 на N | >>> a = matlab.int16([[1 + 10j, 2 + 20j, 3 + 30j], [4, 5, 6]], is_complex=Истина) >>> печать (a.imag()) [10,0,20,0,30,0] |
noncomplex() | Возвращает элементы, которые не являются комплексными числами, в столбцах порядок, как массив 1 на N | >>> a = matlab.int16( [[1, 2, 3], [4, 5, 6]]) >>> print(a.noncomplex()) [1,4,2,5,3,6] |
| Измените форму массива в соответствии с размерами и верните результат | >>> a = matlab.int16( [[1, 2, 3], [4, 5, 6]]) >>> напечатать(а) [[1,2,3],[4,5,6]] >>> a.reshape(3, 2) >>> напечатать(а) [[1,5],[4,3],[2,6]] |
toarray() | Вернуть стандартный Python | >>> a = matlab. int16( [[1, 2, 3], [4, 5, 6]]) >>> a[0].toarray() массив('ч', [1, 2, 3]) >>> b = matlab.int16( [[1 + 10j, 2 + 20j, 3 + 30j], [4, 5, 6]], is_complex=Истина) >>> b.real().toarray() массив('ч', [1, 4, 2, 5, 3, 6]) |
tomemoryview() | Вернуть стандартный Python | >>> a = matlab.int16( [[1, 2, 3], [4, 5, 6]]) >>> b = a.tomemoryview() >>> б.толист() [[1, 2, 3], [4, 5, 6]] >>> б.форма (2, 3) |
Создайте массив MATLAB с N элементами
Когда вы создаете массив с N
элементами, размер
1 N
, потому что это массив MATLAB.
импорт матлаб A = matlab.int8 ([1,2,3,4,5]) печать (A.размер) (1, 5)
Инициализатор представляет собой список Python, содержащий пять чисел. Размер массива MATLAB 1 на 5, указанный кортежем (1,5)
.
Многомерные массивы MATLAB в Python
В Python можно создавать многомерные массивы MATLAB любого числового типа. Используйте вложенный список Python с плавающей запятой, чтобы создать массив MATLAB 2 на 5 двойных значений.
импорт матлаб A = matlab.double([[1,2,3,4,5], [6,7,8,9,10]]) печать(А) [[1.0,2.0,3.0,4.0,5.0],[6.0,7.0,8.0,9.0,10.0]]
Атрибут size
A
показывает, что это размер 2 на 5
множество.
печать (размер А) (2, 5)
Индексирование массивов MATLAB в Python
Вы можете индексировать массивы MATLAB так же, как вы можете индексировать списки и кортежи Python.
импорт матлаб A = matlab.int8 ([1,2,3,4,5]) печать (А [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]]) печать (А [1] [2]) 8,0
Разрез массивов MATLAB в Python
Массивы MATLAB можно разрезать так же, как вы можете разрезать списки и кортежи Python.
импорт матлаб A = matlab.int8([[1,2,3,4,5]]) печать (А [0] [1: 4]) [2,3,4]
Вы можете назначить данные срезу. В этом примере показано присвоение списка Python массиву.
A = matlab.double([[1,2,3,4],[5,6,7,8]]) А[0] = [10,20,30,40] печать(А) [[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]) А[0][2:4] = [30,40] А[0][6:8] = [70,80] печать(А) [[1,2,30,40,5,6,70,80]]
Изменение формы массивов MATLAB в Python
Вы можете изменить форму массива MATLAB в Python с помощью метода reshape
. Входной аргумент, размер
, должна быть последовательность, которая не меняет количество
элементы в массиве. Используйте изменить форму
, чтобы изменить массив MATLAB 1 на 9 на 3 на 3. Элементы берутся из исходного массива в
порядок столбцов.
импорт матлаб A = matlab.int8 ([1,2,3,4,5,6,7,8,9]) А. изменить форму ((3,3)) печать(А) [[1,4,7],[2,5,8],[3,6,9]]
Используйте пользовательские типы для инициализации массивов MATLAB
Вы можете использовать пользовательские типы, такие как ndarray
в NumPy для
инициализация массивов MATLAB в Python. Пользовательский тип должен реализовывать протокол буфера Python.
импорт матлаб импортировать numpy nf = numpy.array([[1.1, 2,2, 3.3], [4.4, 5.5, 6.6]]) md = matlab.double (nf) ni32 = numpy.array([[1, 2, 3], [4, 5, 6]], dtype='int32') mi32 = matlab.int32 (ni32)
См. также
- Использование массивов MATLAB в Python
- Передача данных в MATLAB из Python
Вы щелкнули ссылку, соответствующую этой команде MATLAB:
Запустите команду, введя ее в командном окне MATLAB. Веб-браузеры не поддерживают команды MATLAB.
Выберите веб-сайт
Выберите веб-сайт, чтобы получить переведенный контент, где он доступен, и увидеть местные события и предложения. В зависимости от вашего местоположения мы рекомендуем вам выбрать: .
Вы также можете выбрать веб-сайт из следующего списка:
Европа
Обратитесь в местный офис
Использовать числовые переменные Python в MATLAB - MATLAB & Simulink
Основное содержимое
Открыть Live Script
В этом примере показано, как использовать числовые типы Python® в MATLAB®.
Используйте числовые типы Python в MATLAB
При вызове функции Python, которая принимает числовой входной аргумент, MATLAB преобразует двойные значения в типы, которые лучше всего представляют данные на языке Python. Например, чтобы вызвать функции тригонометрии в модуле Python math
, передайте двойное значение MATLAB.
пинум = py.math.radians(90)
пинум = 1,5708
Для функций, возвращающих Python типа float
, MATLAB автоматически преобразует этот тип в double.
класс(пинум)
анс = 'двойной'
Для функций Python, возвращающих целые типы, MATLAB автоматически преобразует этот тип в int64
. Например, функция bit_length
возвращает количество битов, необходимых для представления целого числа в двоичном виде в виде значения int
.
py.int(intmax).bit_length
анс = int64 31
Вызов методов Python с числовыми
итерируемыми
аргументами Функция Python math. fsum
суммирует значения с плавающей запятой в итерируемых
входных аргументах. Вы можете передать вектор MATLAB этой функции. Например, откройте файл данных MATLAB patients.mat
и прочитайте числовой массив Height
.
загрузка пациентов.мат класс (высота)
ответ = 'двойной'
размер (высота)
инс = 1×2 100 1
Когда вы передаете этот аргумент в Python, MATLAB автоматически преобразует числовые значения в числовые значения Python, и Python перебирает векторные значения.
py.math.fsum(Высота)
анс = 6707
Использовать массив Python
Типы в MATLAB Предположим, что у вас есть функция Python, которая возвращает следующий массив Python array.array
типа double.
P = py.array.array('d', 1:5)
P = Массив Python со свойствами: размер элемента: 8 код типа: [1×1 py.str] массив('d', [1. 0, 2.0, 3.0, 4.0, 5.0])
Чтобы передать P
функции MATLAB sum
, преобразуйте P
в массив MATLAB типа double.
сумма(двойной(P))
анс = 15
Использовать массив Python Integer
Типы в MATLAB Предположим, что у вас есть этот массив Python. Вызовите функцию Python reverse
для массива, затем преобразуйте результат в массив MATLAB.
обр = py.array.array('i',[int32(5),int32(1),int32(-5)])
обр = Массив Python со свойствами: размер элемента: 4 код типа: [1×1 py.str] массив('i', [5, 1, -5])
обр.задний ход A = int32(arr)
A = 1×3 int32 вектор-строка -5 1 5
Числовые типы по умолчанию
По умолчанию число в MATLAB имеет тип double
. По умолчанию число (без дробной части) в Python имеет целочисленный тип. Это различие может вызвать путаницу при передаче чисел в функции Python.
Например, когда вы передаете эти числа MATLAB функции Python datetime
, Python читает их как тип float
и отображает ошибку:
d = py.datetime.date(2014,12,31)
Ошибка Python: TypeError: ожидается целочисленный аргумент, получено float
Чтобы исправить ошибку, явно преобразовать каждое число в целочисленный тип:
d = py.datetime.date(int32(2014),int32(12),int32(31))
d = Дата Python со свойствами: день: 31 месяц: 12 год: 2014 2014-12-31Почему я вижу свойства при отображении числа?
MATLAB отображает все типы Python как объекты, которые включают в себя список свойств объекта. Для числовых типов MATLAB отображает ожидаемое выходное значение в последней строке.
py.int(5)
анс = Python int со свойствами: знаменатель: 1 изображение: 0 числитель: 5 реальный: 5 5
У вас есть модифицированная версия этого примера.