exponenta event banner

validateattributes

Проверка достоверности массива

Описание

пример

validateattributes(A,classes,attributes) проверяет этот массив A принадлежит хотя бы одному из указанных классов (или его подклассу) и имеет все указанные атрибуты. Если A не соответствует критериям, тогда MATLAB ® выдает ошибку и отображает форматированное сообщение об ошибке. В противном случае validateattributes завершается без отображения выходных данных.

пример

validateattributes(A,classes,attributes,argIndex) включает позицию ввода в списке аргументов функции как часть любых генерируемых сообщений об ошибках.

пример

validateattributes(A,classes,attributes,funcName) включает указанное имя функции в сгенерированные идентификаторы ошибок.

пример

validateattributes(A,classes,attributes,funcName,varName) включает указанное имя переменной в создаваемые сообщения об ошибках.

пример

validateattributes(A,classes,attributes,funcName,varName,argIndex) включает указанную информацию в генерируемые сообщения об ошибках или идентификаторы.

Примеры

свернуть все

classes = {'numeric'};
attributes = {'size',[4,6,2]};

A = rand(3,5,2);
validateattributes(A,classes,attributes)
Expected input to be of size 4x6x2 when it is actually size 3x5x2.

Поскольку A не соответствует указанным атрибутам, MATLAB выдает сообщение об ошибке.

Определите, увеличивается массив или нет.

A = [1 5 8 2;
     9 6 9 4]
validateattributes(A, {'double'},{'nondecreasing'})
validateattributes(A, {'double'},{'increasing'})
A =

     1     5     8     2
     9     6     9     4

С тех пор A увеличивается и не увеличивается, validateattributes не выдает ошибку ни для одной из проверок атрибутов.

Настройка A(2,3) равно A(1,3) приводит к столбцу, который больше строго не увеличивается, поэтому validateattributes выдает ошибку.

A(2,3) = 8
validateattributes(A, {'double'},{'increasing'})
A =

     1     5     8     2
     9     6     8     4

Expected input to be strictly increasing.

Однако столбцы остаются неизменными, поскольку каждый элемент столбца равен предыдущему элементу столбца или превышает его. Следующий код не вызывает ошибки.

validateattributes(A, {'double'},{'nondecreasing'})

Предполагая, что a является вторым входным аргументом функции, проверьте ее неотрицательность.

a = complex(1,1);
validateattributes(a,{'numeric'},{'nonnegative'},2)
Expected input number 2 to be nonnegative.

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

Проверьте, что значения в массиве являются 8-битными целыми числами от 0 до 10.

Предположим, что этот код встречается в функции с именем Rankings.

classes = {'uint8','int8'};
attributes = {'>',0,'<',10};
funcName = 'Rankings';
A = int8(magic(4));

validateattributes(A,classes,attributes,funcName)
Error using Rankings
Expected input to be an array with all of the values < 10.

Создание пользовательской функции, проверяющей входные параметры с помощью inputParserи использовать validateattributes в качестве функции проверки для addRequired и addOptional методы.

Определите функцию.

function a = findArea(shape,dim1,varargin)
   p = inputParser;
   charchk = {'char'};
   numchk = {'numeric'};
   nempty = {'nonempty'};

   addRequired(p,'shape',@(x)validateattributes(x,charchk,nempty))
   addRequired(p,'dim1',@(x)validateattributes(x,numchk,nempty))
   addOptional(p,'dim2',1,@(x)validateattributes(x,numchk,nempty))
   parse(p,shape,dim1,varargin{:})
 
   switch shape
      case 'circle'
         a = pi * dim1.^2;
      case 'rectangle'
         a = dim1 .* p.Results.dim2;
   end
end

Вызовите функцию с нечисловым третьим входом.

myarea = findArea('rectangle',3,'x')
Error using findArea (line 10)
The value of 'dim2' is invalid. Expected input to be one of these types:

double, single, uint8, uint16, uint32, uint64, int8, int16, int32, int64

Проверьте входы функции и включите информацию о имени ввода и позиции в сгенерированной ошибке.

Определите функцию.

function v = findVolume(shape,ht,wd,ln)
   validateattributes(shape,{'char'},{'nonempty'},mfilename,'Shape',1)
   validateattributes(ht,{'numeric'},{'nonempty'},mfilename,'Height',2)
   validateattributes(wd,{'numeric'},{'nonempty'},mfilename,'Width',3)
   validateattributes(ln,{'numeric'},{'nonempty'},mfilename,'Length',4)

Вызовите функцию без shape входной аргумент.

vol = findVolume(10,7,4)
Error using findVolume
Expected input number 1, Shape, to be one of these types:

char

Instead its type was double.

Error in findVolume (line 2)
validateattributes(shape,{'char'},{'nonempty'},mfilename,'Shape',1)

Имя функции становится частью идентификатора ошибки.

MException.last.identifier
ans =

MATLAB:findVolume:invalidType

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

свернуть все

Ввод, заданный как массив любого типа.

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

Допустимые типы данных, указанные как символьный вектор, массив ячеек символьных векторов или строковый массив. Каждый элемент classes может быть именем любого встроенного или пользовательского класса, включая:

'single'Номер с одной точностью
'double'Число с двойной точностью
'int8'Целое число со знаком 8 бит
'int16'Знаковое 16-разрядное целое число
'int32'Подписанное 32-разрядное целое число
'int64'Подписанное 64-разрядное целое число
'uint8'Беззнаковое 8-разрядное целое число
'uint16'Беззнаковое 16-разрядное целое число
'uint32'Беззнаковое 32-разрядное целое число
'uint64'Беззнаковое 64-разрядное целое число
'logical'Логичный 1 (true) или 0 (false)
'char'Характер
'string'Строковый массив
'struct'Структурный массив
'cell'Массив ячеек
'table'Стол
'function_handle'Дескриптор функции
'numeric'Любой тип данных, для которого isa(A,'numeric') функция возвращает true, включая int8, int16, int32, int64, uint8, uint16, uint32, uint64, single, или double
'<class_name>'Любое другое имя класса

Типы данных: cell | string

Допустимые атрибуты, указанные как массив ячеек или строковый массив.

Для некоторых атрибутов также требуются числовые значения, например атрибуты, определяющие размер или количество элементов A. Для этих атрибутов числовое значение или вектор должны сразу следовать за именем атрибута в массиве ячеек. Строковый массив не может использоваться для представления числовых значений в attributes.

Эти атрибуты описывают размер и форму массива A.

'2d'Двумерный массив, включая скаляры, векторы, матрицы и пустые массивы
'3d'Массив с тремя или меньшим размером
'column'Вектор столбца, N-по-1
'row'Вектор строки, 1-by-N
'scalar'Скалярное значение, 1 на 1
'scalartext'Скаляр строки или вектор символов, включая входные данные с нулевыми символами
'vector'Вектор строки или столбца или скалярное значение
'size', [d1,...,dN]Массив с размерами d1-by-... -by-dN. Чтобы пропустить проверку определенного размера, укажите NaN для этого измерения, например, [3,4,NaN,2].
'numel', NМассив с N элементы
'ncols', NМассив с N колонки
'nrows', NМассив с N ряды
'ndims', NN-мерный массив
'square'Квадратная матрица; другими словами, двумерный массив с равным количеством строк и столбцов
'diag'Диагональная матрица
'nonempty'Нет размеров, равных нулю
'nonsparse'Массив, который не является разреженным

Эти атрибуты определяют допустимые диапазоны для значений в A.

'>', NВсе значения больше N
'>=', NВсе значения больше или равны N
'<', NВсе значения меньше N
'<=', NВсе значения меньше или равны N
'finite'Все значения являются конечными
'nonnan'Нет значений NaN (не число)

Эти атрибуты проверяют типы значений в числовом или логическом массиве, A.

'binary'Массив единиц и нулей
'even'Массив четных целых чисел (включает ноль)
'odd'Массив нечетных целых чисел
'integer'Массив целых значений
'real'Массив вещественных значений
'nonnegative'Ни один элемент не меньше нуля
'nonzero'Ни один элемент не равен нулю
'positive'Ни один элемент не меньше или равен нулю
'decreasing'Каждый элемент столбца меньше предыдущего, и ни один элемент не является NaN.
'increasing'Каждый элемент столбца больше предыдущего элемента, и ни один элемент не является NaN.
'nondecreasing'Каждый элемент столбца больше или равен предыдущему элементу, и ни один элемент не является NaN.
'nonincreasing'Каждый элемент столбца меньше или равен предыдущему элементу, и ни один элемент не является NaN.

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

Имя функции для проверки, указанное как символьный вектор или как строковый скаляр. Если указан пустой символьный вектор, '', или <missing> строка, затем validateattributes функция игнорирует funcName вход.

Типы данных: char | string

Имя входной переменной, определяемой как символьный вектор или строковый скаляр. Если указан пустой символьный вектор, '', или <missing> строка, затем validateattributes функция игнорирует varName вход.

Типы данных: char | string

Позиция входного аргумента, заданная как положительное целое число.

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

Расширенные возможности

.
Представлен в R2007b