Классы преобразования данных и интерфейс MATLAB Compiler SDK

Обзор

Классы преобразования данных:

  • MWArray

  • MWIndexArray

  • MWCellArray

  • MWCharacterArray

  • MWLogicalArray

  • MWNumericArray

  • MWStructArray

MWArray и MWIndexArray являются абстрактными классами. Другие классы представляют стандартный MATLAB® типы массивов: камера, символ, логический, числовой и структурный. Каждый класс предоставляет конструкторы и набор свойств и методов для создания и доступа к состоянию базового массива MATLAB.

Существуют некоторые типы данных (массивы ячеек, массивы структур и массивы комплексных чисел), обычно используемые в продукте MATLAB, которые недоступны в качестве собственных типов .NET. Чтобы представлять эти типы данных, необходимо создать образец любого из MWCellArray, MWStructArray, или MWNumericArray.

Возврат данных из MATLAB в управляемый код

Все данные, возвращенные из функции MATLAB в метод .NET, представлены в виде образца соответствующего MWArray подкласс. Для примера массив ячеек MATLAB возвращается как MWCellArray объект.

Возвращаемые данные не преобразуются автоматически в собственный массив. Если вам нужно получить соответствующий тип собственного массива, вызовите ToArray метод, который преобразует массив MATLAB в соответствующий собственный тип данных, за исключением камер и массивов структур.

Пример MWNumericArray в приложении .NET

Вот фрагмент кода, который показывает, как преобразовать double значение (5.0) на MWNumericArray тип:

MWNumericArray arraySize = 5.0;
magicSquare = magic.MakeSqr(arraySize);

После double значение преобразуется и присваивается переменной arraySize, можно использовать arraySize аргумент с методом, основанным на MATLAB, без дальнейшего преобразования. В этом примере метод, основанный на MATLAB magic.MakeSqr(arraySize).

Интерфейсы, сгенерированные MATLAB Compiler SDK .NET Target

Для каждой функции MATLAB, которую вы задаете как часть сборки .NET, продукт MATLAB Compiler SDK™ генерирует API на основе подписи функции MATLAB, следующим образом:

  • Сигнатура single output, которая принимает, что требуется только один выход и возвращает результат в одном MWArray а не массив MWArray.

  • Сигнатура standard, которая задает входы типа MWArray и возвращает значения как массив MWArray.

  • feval подпись, которая включает как вход, так и выходные аргументы в список аргументов, а не возвращает выходам как возврат значение. Сначала задаются выходные аргументы, далее указываются входные параметры.

Однократный выходной API

Примечание

Обычно вы используете один выходной интерфейс для функций MATLAB, которые возвращают один аргумент. Можно также использовать один выходной интерфейс, когда вы хотите использовать выход функции как вход в другую функцию.

Для каждой функции MATLAB продукт MATLAB Compiler SDK генерирует класс оболочки, который имеет перегруженные методы для реализации различных форм типового вызова функции MATLAB. Один выходной API для функции MATLAB возвращает одну MWArray.

Для примера в следующей таблице показана типовая функция foo наряду с одним выходным API, который компилятор генерирует для своих нескольких форм.

Обобщенная функция MATLAB
function [Out1, Out2, ..., varargout] = foo(In1, In2, ..., InN, 
varargin)
API, если нет входных параметров
public MWArray foo() 
API, если существует один или несколько входных параметров
public MWArray foo(MWArray In1, MWArray In2...MWArray inN)
API, если есть необязательные входные параметры
public MWArray foo(MWArray In1, MWArray In2,      ..., MWArray 
inN
params MWArray[] varargin)

В примере входные параметры In1, In2, и inN имеют тип MWArray.

Точно так же в случае необязательных аргументов params аргументы имеют тип MWArray. (The varargin аргумент аналогичен varargin функция в MATLAB - она позволяет пользователю передавать переменное количество аргументов.)

Примечание

При вызове метода класса в приложении .NET сначала задайте все необходимые входы, а затем любые необязательные аргументы.

Функции, имеющие один целочисленный вход, требуют явного приведения к типу MWNumericArray чтобы отличить сигнатуру метода от стандартной сигнатуры интерфейса, которая не имеет входных параметров.

Стандартный API

Обычно вы используете стандартный интерфейс для функций MATLAB, которые возвращают несколько выходных значений.

Стандартный интерфейс вызова возвращает массив MWArray а не один объект массива.

Стандартный API для типовой функции с никакими, одним, несколькими или переменным количеством аргументов показан в следующей таблице.

Обобщенная функция MATLAB
function [Out1, Out2, ..., varargout] = foo(In1, In2, ..., InN, 
varargin)
API, если нет входных параметров
public MWArray[] foo(int numArgsOut) 
API, если существует один входной параметр
public MWArray [] foo(int numArgsOut, MWArray In1) 
API, если существует два N входные параметры
public MWArray[] foo(int numArgsOut, MWArray In1,MWArray In2, 
\... MWArray InN) 
API, если есть необязательные аргументы, представленные varargin аргумент
public MWArray[] foo(int numArgsOut,MWArray in1,MWArray in2, 
MWArray InN,
params MWArray[] 
varargin)

Подробная информация об аргументах для этих выборок стандартных сигнатур показана в следующей таблице.

АргументОписаниеПодробнее
numArgsOutКоличество выходов

Целое число, указывающее количество выходов, которые вы хотите вернуть методу.

The numArgsOut аргумент всегда должен быть первым аргументом в списке.

In1, In2, ...InNНеобходимые входные параметры

Все следующие аргументы numArgsOut в списке аргументов указаны входы вызываемого метода.

Сначала задайте все необходимые входы. Каждый необходимый вход должен быть типа MWArray или один из его производных типов.

vararginНеобязательные входы

Вы также можете задать дополнительные входы, если ваш код MATLAB использует varargin вход: перечислите необязательные входы или поместите их в MWArray[] аргумент, помещающий массив последним в список аргументов.

Out1, Out2, ...OutNВыходные аргументы

Со стандартным интерфейсом вызова все выходные аргументы возвращаются как массив MWArray.

feval API

В сложение с методами в одном API и стандартном API, в большинстве случаев, MATLAB Compiler SDK продукт производит дополнительный перегруженный метод. Если оригинальный код MATLAB не содержит выходных аргументов, то компилятор не будет генерировать feval интерфейс метода.

Рассмотрим функцию со следующей структурой:

function [Out1, Out2, ..., varargout] = foo(In1, In2, ..., InN, 
varargin)

Компилятор генерирует следующий API, известный как feval interface,

public void foo 
            (int numArgsOut,
             ref MWArray [] ArgsOut, 
             MWArray[] ArgsIn)

где аргументы следующие:

numArgsOutКоличество выходов

Целое число, указывающее количество выходов, которые вы хотите вернуть.

Это число обычно совпадает с количеством следующих выходных аргументов. The varargout массив считается всего одним аргументом, если он присутствует.

ref MWArray [] ArgsOutВыходные аргументы

Следующие numArgsOut все выходы оригинального кода MATLAB, каждый из которых отображается в том же порядке, в котором они указаны в левой части оригинального кода MATLAB.

A ref атрибут предваряет все выходные аргументы, указывая, что эти массивы передаются по ссылкам.

MWArray[] ArgsInВходные параметры

MWArray типы или поддерживаемые типы примитивов .NET.

Когда вы передаете образец MWArray type, базовый массив MATLAB передается непосредственно в вызываемую функцию. Нативные типы сначала преобразуются в MWArray типы.

Для просмотра документации необходимо авторизоваться на сайте