coder.typeof

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

Описание

пример

Примечание

Можно также создать и отредактировать coder.Type объекты в интерактивном режиме при помощи Редактора типов Кодера. Смотрите Создают и Входные Типы Редактирования при помощи Редактора типов Кодера.

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

пример

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 может быть MATLAB, числовой, логический, char, перечисление или массив фиксированной точки. 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]);

Типы данных: логический

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 верхние границы отбрасываний для размерностей переменного размера.

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

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

Советы

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

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

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

    Примечание

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

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

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

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

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

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

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

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

Введенный в R2011a