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-by-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