coder.typeof

Создание coder.Type объект, чтобы представлять тип входного параметра функции точки входа

Описание

пример

Примечание

Можно также создавать и редактировать coder.Type объекты в интерактивном режиме с помощью редактора типов кодеров. См. «Создание и редактирование входных типов при помощи редактора типов кодеров».

type_obj = coder.typeof(v) создает объект, который является производным от coder.Type для представления типа v для генерации кода. Использовать coder.typeof для задания только типов входных параметров. Используйте его с codegen функциональные -args опция или в MATLAB® Coder™ проект, когда вы определяете тип входа путем предоставления примера кода. Не используйте его в коде MATLAB, из которого вы намерены сгенерировать код.

пример

type_obj = coder.typeof(v,sz,variable_dims) возвращает измененную копию type_obj = coder.typeof (v) с верхним размером границы, заданным sz и переменные размерности, заданные variable_dims.

type_obj = coder.typeof(v,'Gpu', true) создает объект, который является производным от coder.Type для представления v в качестве входного типа GPU для генерации кода. Для эта опция требуется действительная лицензия GPU Coder™.

пример

type_obj = coder.typeof(type_obj) возвращает type_obj сам.

Примеры

свернуть все

Создайте тип для простого 5x6 фиксированного размера матрица двойников.

coder.typeof(ones(5,6))
ans = 

coder.PrimitiveType
   5×6 double

coder.typeof(0,[5 6])
ans = 

coder.PrimitiveType
   5×6 double

Создайте тип для матрицы переменного размера с двойной точностью.

coder.typeof(ones(3,3),[],1)
ans = 

coder.PrimitiveType
   :3×:3 double
% ':' indicates variable-size dimensions

Создайте тип для матрицы с размерностями фиксированного размера и переменного размера.

coder.typeof(0,[2,3,4],[1 0 1])
ans = 

coder.PrimitiveType
   :2×3×:4 double

coder.typeof(10,[1 5],1) 
ans = 

coder.PrimitiveType
   1×:5 double
% ':' indicates variable-size dimensions

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

coder.typeof(10,[inf,3]) 
ans = 

coder.PrimitiveType
   :inf×3 double
% ':' indicates variable-size dimensions

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

coder.typeof(10,[inf,3],[0 1]) 
ans = 

coder.PrimitiveType
   :inf×:3 double

Преобразуйте матрицу фиксированного размера в матрицу переменного размера.

coder.typeof(ones(5,5),[],1) 
 ans = 

coder.PrimitiveType
   :5×:5 double
% ':' indicates variable-size dimensions

Создайте тип для структуры с полем переменного размера.

x.a = coder.typeof(0,[3 5],1);
x.b = magic(3);
coder.typeof(x)
ans = 

coder.StructType
   1×1 struct
      a: :3×:5 double
      b: 3×3 double
% ':' indicates variable-size dimensions

Создайте вложенную структуру (структуру как поле другой структуры).

S = struct('a',double(0),'b',single(0));
SuperS.x = coder.typeof(S);
SuperS.y = single(0);
coder.typeof(SuperS)  
ans = 

coder.StructType
   1×1 struct
      x: 1×1 struct
         a: 1×1 double
         b: 1×1 single
      y: 1×1 single

Создайте структуру, содержащую массив структур переменного размера как поле.

S = struct('a',double(0),'b',single(0));
SuperS.x = coder.typeof(S,[1 inf],[0 1]);
SuperS.y = single(0);
coder.typeof(SuperS)
ans = 

coder.StructType
   1×1 struct
      x: 1×:inf struct
         a: 1×1 double
         b: 1×1 single
      y: 1×1 single
% ':' indicates variable-size dimensions

Создайте тип для однородного массива ячеек с полем переменного размера.

a = coder.typeof(0,[3 5],1);
b = magic(3);
coder.typeof({a b})
ans = 

coder.CellType
   1×2 homogeneous cell 
      base: :3×:5 double
% ':' indicates variable-size dimensions

Создайте тип для гетерогенного массива ячеек.

a = coder.typeof('a');
b = coder.typeof(1);
coder.typeof({a b})
ans = 

coder.CellType
   1×2 heterogeneous cell 
      f1: 1×1 char
      f2: 1×1 double

Создайте однородный тип массива ячеек переменного размера из массива ячеек, который имеет тот же класс, но разные размеры.

1. Создайте тип для массива ячеек, который содержит два векторов символов с различными размерами. Тип массива ячеек неоднороден.

coder.typeof({'aa','bbb'})
ans = 

coder.CellType
   1×2 heterogeneous cell 
      f1: 1×2 char
      f2: 1×3 char

2. Создайте тип с помощью того же входа массива ячеек. На этот раз укажите, что тип массива ячеек имеет размерности переменного размера. Тип массива ячеек однороден.

coder.typeof({'aa','bbb'},[1,10],[0,1])
ans = 

coder.CellType
   1×:10 locked homogeneous cell 
      base: 1×:3 char
% ':' indicates variable-size dimensions

Измените массив фиксированного размера на ограниченный массив переменного размера.

Создайте тип для объекта класса значения.

1. Создайте этот класс значений:

classdef mySquare
    properties
        side;
    end
    methods
        function obj = mySquare(val)
            if nargin > 0
                obj.side = val;
            end
        end
        function a = calcarea(obj)
            a = obj.side * obj.side;
        end
    end
end

2. Создайте объект mySquare.

sq_obj = coder.typeof(mySquare(4))
sq_obj = 

coder.ClassType
   1×1 mySquare   
      side: 1×1 double

3. Создайте тип для объекта, который имеет те же свойства, что и sq_obj.

t = coder.typeof(sq_obj)
t = 

coder.ClassType
   1×1 mySquare   
      side: 1×1 double

Кроме того, можно создать тип из определения класса:

t = coder.typeof(mySquare(4))
t = 

coder.ClassType
   1×1 mySquare   
      side: 1×1 double

Задайте строковый скаляр. Для примера:

s = "mystring";

Создайте тип из s.

t = coder.typeof(s);

Чтобы сделать t переменный размер, присвойте Value свойство t к типу для вектора символов переменного размера, которая имеет верхнюю границу, которую вы хотите. Для примера задайте этот тип t является переменным размером с верхней границей 10.

t.Properties.Value = coder.typeof('a',[1 10],[0 1]);

Чтобы указать, что t является переменным размером и не имеет верхней границы:

t.Properties.Value = coder.typeof('a',[1 inf]);

Передайте тип в codegen при помощи -args опция.

codegen myFunction -args {t}

Входные параметры

свернуть все

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

Когда v - массив ячеек, элементы которого имеют одинаковые классы, но разные размеры, если заданы размерности переменного размера, coder.typeof создает однородный тип массива ячеек. Если элементы имеют различные классы, coder.typeof сообщает об ошибке.

Пример: coder.typeof(ones(5,6));

Типы данных: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | struct | table | cell | function_handle | categorical | datetime | duration | calendarDuration | fi
Поддержка комплексного числа: Да

Вектор размера, задающий каждую размерность объекта типа.

Если sz задает inf для размерности, размер размерности неограниченен, а размерность переменный. Когда sz является [], верхние границы v не изменяйте.

Если размер не задан, sz принимает размерность по умолчанию v.

Пример: coder.typeof(0,[5,6]);

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Логический вектор, который определяет, является ли каждая размерность переменным размером (true) или фиксированным размером (false). Для массива ячеек, если элементы имеют другие классы, вы не можете задать размерности переменного размера.

Если вы не задаете variable_dims входной параметр, ограниченные размерности типа фиксированы.

Скалярное variable_dims применяется ко всем размерностям. Однако, если variable_dims является 1размер синглтонной размерности остается фиксированным.

Пример: coder.typeof(0,[2,3,4],[1 0 1]);

Типы данных: logical

coder.Type объект, для представления типа v для генерации кода.

Пример: type_obj = coder.typeof(ones(5,6));

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | struct | table | cell | function_handle | categorical | datetime | duration | calendarDuration | fi
Поддержка комплексного числа: Да

Выходные аргументы

свернуть все

coder.Type объект, для представления типа v для генерации кода.

Пример: type_obj = coder.typeof(ones(5,6));

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | struct | table | cell | function_handle | categorical | datetime | duration | calendarDuration | fi
Поддержка комплексного числа: Да

Ограничения

  • Для разреженных матриц, coder.typeof отбрасывает верхние границы для размерностей переменного размера.

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

  • При использовании coder.typeof для представления массивов GPU, свойство режима выделения памяти (malloc) объекта строения кода GPU должно быть установлено в 'discrete'.

Совет

  • coder.typeof фиксирует размер синглтонной размерности, если нет variable_dims аргумент явным образом задает, что синглтонная размерность имеет переменный размер.

    Например, следующий код определяет 1-by-: 10 double. Первая размерность (синглтонная размерность) имеет фиксированный размер. Второе измерение имеет переменный размер.

    t = coder.typeof(5,[1 10],1)
    Напротив, этот код задает: 1-by-: 10 double. Обе размерности имеют переменный размер.
    t = coder.typeof(5,[1 10],[1 1])

    Примечание

    Для блока MATLAB Function синглтонные размерности входа или выхода сигналов не могут иметь переменный размер.

  • Если вы уже задаете тип переменного входа с помощью функции type, не используйте coder.typeof если вы также не хотите задать размер. Для образца вместо coder.typeof(single(0)), используйте синтаксис single(0).

  • Для типов массивов ячеек, coder.typeof определяет, является ли тип массива ячеек однородным или неоднородным.

    Если элементы массива ячеек имеют одинаковый класс и размер, coder.typeof возвращает однородный тип массива ячеек.

    Если элементы имеют различные классы, coder.typeof возвращает гетерогенный тип массива ячеек.

    Для некоторых массивов ячеек классификация как однородная или неоднородная неоднозначна. Для примера тип {1 [2 3]} может быть гетерогенным типом 1x2, где первый элемент является двойным, а второй - двойным. Тип может также быть однородным типом 1x3, у которого элементы имеют класс double и размер 1x: 2. Для этих неоднозначных случаев ,coder.typeof использует эвристику, чтобы классифицировать тип как однородный или неоднородный. Если вам нужна другая классификация, используйте кодер. CellType makeHomogeneous или makeHeterogeneous методы для создания типа с нужной классификацией. makeHomogeneous метод создает однородную копию типа. makeHeterogeneous метод создает гетерогенную копию типа.

    makeHomogeneous и makeHeterogeneous методы постоянно присваивают классификацию как неоднородную и однородную. Вы не можете позже использовать один из этих методов, чтобы создать копию, которая имеет другую классификацию.

  • Во время генерации кода с типами массивов GPU, если один вход в функцию точки входа имеет тип массива GPU, то выходные переменные все типы массивов GPU, при условии, что они поддерживаются для генерации кода GPU. Для примера. если функция точки входа возвращает struct и потому что struct не поддерживается, сгенерированный код возвращает выход центральный процессор. Однако, если возвращается поддерживаемый тип матрицы, сгенерированный код возвращает выход графический процессор.

Введенный в R2011a