Когда клиент.NET вызывает функцию MATLAB® посредством запроса и получает результат в ответе, преобразование данных происходит между типами MATLAB и типами C#.
Существует много типов данных или классы, что можно работать с в MATLAB. Каждый из этих классов в форме матрицы или массива. Можно создать матрицы и массивы и целочисленных данных с плавающей точкой, символов и строк и логических истинных и ложных состояний. Структуры и массивы ячеек обеспечивают способ сохранить отличающиеся типы данных в том же массиве.
Все основные классы MATLAB окружены в схеме Основной принцип Классы Данных MATLAB.
Указатели на функции не поддержаны MATLAB Production Server™.
Основные классы данных MATLAB
Каждый тип данных MATLAB имеет определенный эквивалент в C#. Подробные описания этих непосредственных отношений заданы в Преобразовании Между Типами MATLAB и Типами C#.
Скалярные числовые типы MATLAB могут быть присвоены нескольким.NET числовые типы, пока нет никакой потери данных или точности.
Основное исключение к этому правилу - то, что MATLAB скалярные данные double
может быть сопоставлен на любой.NET числовой тип. Поскольку double
является числовым типом по умолчанию в MATLAB, это исключение предоставляет больше гибкости пользователям клиентского API.NET MATLAB Production Server.
MATLAB на.NET Числовое Соответствие типов описывает соответствие типов для скалярного числового приведения.
MATLAB на.NET числовое соответствие типов
Тип MATLAB | Типы.NET |
---|---|
uint8 | System.Int16 , System.UInt16 , System.Int32 , System.UInt32 , System.Int64 , System.UInt64 , System.Single , System.Double |
int8 | System.Int16 , System.Int32 , System.Int64 , System.Single , System.Double |
uint16 | System.Int32 , System.UInt32 , System.Int64 , System.UInt64 , System.Single , System.Double |
int16 | System.Int32 , System.Int64 , System.Single , System.Double |
uint32 | System.Int64 , System.UInt64 , System.Single , System.Double |
int32 | System.Int64 , System.Single , System.Double |
uint64 | System.Single , System.Double |
int64 | System.Single , System.Double |
single | System.Double |
double | System.SByte , System.Byte , System.Int16 , System.UInt16 , System.Int32 , System.UInt32 , System.Int64 , System.UInt64 , System.Single |
В MATLAB размерность является атрибутом фундаментальных типов и не добавляет к количеству типов, как это делает на.NET.
В C# double
, double[]
и double[,]
являются тремя различными типами данных. В MATLAB существует только тип данных double
и возможно скалярный экземпляр, векторный экземпляр или многомерный экземпляр.
Подпись C# | Значение возвращено из MATLAB |
---|---|
double[,,] foo() | ones(1,2,3) |
Как вы задаете свою функцию MATLAB, и соответствующая сигнатура метода C# определяет, будут ли ваши выходные данные принуждены, с помощью дополнения или усечения.
Это приведение выполняется автоматически для вас. В этом разделе описываются правила, сопровождаемые для дополнения и усечения.
Многомерные массивы типов C# поддерживаются. Зубчатые массивы не поддержаны.
Когда тип возврата метода C# имеет большее количество размерностей, чем MATLAB, размерности MATLAB дополнены единицами (1
s), чтобы совпадать с необходимым количеством выходных размерностей в C#.
Следующие таблицы обеспечивают примеры того, как дополнение выполняется для вас:
Как Ваш Метод C# Возвращается, Тип Дополнен
Функция MATLAB | Сигнатура метода C# | Когда Размерности в MATLAB: | И Размерности в C#: |
---|---|---|---|
function a = fooa = ones(2,3); | double[,,,] foo() | size(a) является [2,3] | Массив будет возвращен как размер 2,3,1,1 |
Когда тип возврата метода C# имеет меньше размерностей, чем MATLAB, размерности MATLAB являются усеченными, чтобы совпадать с необходимым количеством выходных размерностей в C#. Это только возможно, когда дополнительные размерности для массива MATLAB имеют значения из единиц (1
s) только.
Чтобы вычислить соответствующее количество размерностей в C#, избыточные единицы являются усеченными в этом порядке:
От конца массива
С начала массива
С середины массива (сканирующий грудь-спина).
Следующие таблицы обеспечивают примеры того, как усечение выполняется для вас:
Как MATLAB обрезает ваш метод C#, возвращают тип
Функция MATLAB | Сигнатура метода C# | Когда Размерности в MATLAB: | И Размерности в C#: |
---|---|---|---|
function a = fooa = ones(1,2,1,1,3,1); | double[,] foo() | size(a) является [1,2,1,1,3,1] | Массив будет возвращен как размер 2,3 |
Следующее является некоторыми примерами сокращения размерности с помощью типа double numeric
:
Усечение размерностей в MATLAB и преобразовании данных C#
Измерения массива MATLAB | Объявленный Вывод тип C# | Выведите размерности C# |
---|---|---|
1 x 1 | double | 0 (скаляр) |
2 x 1 | double[] | 2 |
1 x 2 | double[] | 2 |
2 x 3 x 1 | double[,] | 2 x 3 |
1 x 3 x 4 | double[,] | 3 x 4 |
1 x 3 x 4 x 1 x 1 | double[,,] | 1 x 3 x 4 |
1 x 3 x 1 x 1 x 2 x 1 x 4 x 1 | double[,,,] | 3 x 2 x 1 x 4 |