exponenta event banner

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 может быть числовым, логическим, символом, перечислением или массивом с фиксированной точкой 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. Первое измерение (одиночное измерение) имеет фиксированный размер. Второй размер имеет переменный размер.

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

    Примечание

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

  • Если тип входной переменной уже задан с помощью функции типа, не используйте 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