Преобразование данных с C# и типами MATLAB

Когда клиент.NET вызывает функцию MATLAB® посредством запроса и получает результат в ответе, преобразование данных происходит между типами MATLAB и типами C#.

Работа с типами данных MATLAB

Существует много типов данных или классы, что можно работать с в 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
uint8System.Int16, System.UInt16, System.Int32, System.UInt32, System.Int64, System.UInt64, System.Single, System.Double
int8System.Int16, System.Int32, System.Int64, System.Single, System.Double
uint16System.Int32, System.UInt32, System.Int64, System.UInt64, System.Single, System.Double
int16System.Int32, System.Int64, System.Single, System.Double
uint32System.Int64, System.UInt64, System.Single, System.Double
int32System.Int64, System.Single, System.Double
uint64System.Single, System.Double
int64System.Single, System.Double
singleSystem.Double
doubleSystem.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#, избыточные единицы являются усеченными в этом порядке:

  1. От конца массива

  2. С начала массива

  3. С середины массива (сканирующий грудь-спина).

Следующие таблицы обеспечивают примеры того, как усечение выполняется для вас:

Как 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 1double0 (скаляр)
2 x 1double[]2
1 x 2double[]2
2 x 3 x 1double[,]2 x 3
1 x 3 x 4double[,]3 x 4
1 x 3 x 4 x 1 x 1double[,,]1 x 3 x 4
1 x 3 x 1 x 1 x 2 x 1 x 4 x 1double[,,,]3 x 2 x 1 x 4

Пустые (нулевые) размерности

 Передача порожней тары C# к MATLAB

 Передающая порожняя тара MATLAB к C#