Проверяйте валидность массива
validateattributes(A,classes,attributes)
validateattributes(A,classes,attributes,argIndex)
validateattributes(A,classes,attributes,funcName)
validateattributes(A,classes,attributes,funcName,varName)
validateattributes(A,classes,attributes,funcName,varName,argIndex)
validateattributes(
подтверждает тот массивA
,classes
,attributes
), A
принадлежит по крайней мере одному из заданных классов (или его подкласс) и имеет все заданные атрибуты. Если A
не соответствует критериям, то MATLAB® выдает ошибку и отображает отформатированное сообщение об ошибке. В противном случае validateattributes
завершается, не отображая вывода.
validateattributes(
включает положение входа в вашем списке аргументов функции как часть любых сгенерированных сообщений об ошибке.A
,classes
,attributes
,argIndex
)
validateattributes(
включает заданное имя функции в сгенерированные ошибочные идентификаторы.A
,classes
,attributes
,funcName
)
validateattributes(
включает заданное имя переменной в сгенерированные сообщения об ошибке.A
,classes
,attributes
,funcName
,varName
)
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
Создайте пользовательскую функцию, которая проверяет входные параметры с inputParser
, и используйте validateattributes
в качестве функции проверки для методов addOptional
и addRequired
.
Задайте функцию.
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
A
Входной параметрВведите, заданный как любой тип массива.
Типы данных: 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' | StringArray |
'struct' | Массив структур |
'cell' | CellArray |
'table' | Таблица |
'function_handle' | Указатель на функцию |
'numeric' | Любой тип данных, для которого функция isa(A,'numeric') возвращается верный, включая int8 , int16 , int32 , int64 , uint8 , uint16 , uint32 , uint64 , single или double |
| Любое другое имя класса |
Типы данных: cell
| string
атрибуты
Допустимые атрибутыДопустимые атрибуты, заданные как массив ячеек.
Некоторые атрибуты также требуют числовых значений, таких как атрибуты, которые задают размер или число элементов A
. Для этих атрибутов числовое значение или вектор должны сразу следовать за названием атрибута в массиве ячеек.
Эти атрибуты описывают размер и форму массива A
.
'2d' | Двумерный массив, включая скаляры, векторы, матрицы и пустые массивы |
'3d' | Массив с тремя или меньшим количеством размерностей |
'column' | Вектор-столбец, N -by-1 |
'row' | Вектор - строка, 1 N |
'scalar' | Скалярное значение, 1 на 1 |
'scalartext' | Или скаляр строки или вектор символов, включая входные параметры с нулевыми символами |
'vector' | Строка или вектор-столбец или скалярное значение |
'size', [d1,...,dN] | Массив с размерностями d1 ...-by-dN . Чтобы пропустить проверку конкретной размерности, задайте NaN для той размерности, такой как [3,4,NaN,2] . |
'numel', N | Массив с элементами N |
'ncols', N | Массив со столбцами N |
'nrows', N | Массив со строками N |
'ndims', N | N- массив |
'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
funcName
Имя функции для валидацииИмя функции для валидации, заданной как вектор символов или как скаляр строки. Если вы задаете пустой символьный вектор, ''
или строку <missing>
, то функция validateattributes
игнорирует вход funcName
.
Типы данных: char | string
varName
Имя входной переменнойИмя входной переменной, заданной как вектор символов или скаляр строки. Если вы задаете пустой символьный вектор, ''
или строку <missing>
, то функция validateattributes
игнорирует вход varName
.
Типы данных: char | string
argIndex
Положение входного параметраПоложение входного параметра, заданного как положительное целое число.
Типы данных: double
Указания и ограничения по применению:
Некоторые сообщения об ошибке являются упрощенной версией сообщения об ошибке MATLAB.
classes
, funcName
, varName
и аргументы argIndex
должны быть постоянными.
Названия атрибута должны быть постоянными.
В сгенерированном коде формат чисел в сообщении об ошибке может отличаться от формата в MATLAB. Например, вот сообщение об ошибке в MATLAB:
Expected input to be an array with all of the values > 3.
Вот сообщение об ошибке в сгенерированном коде:
Expected input to be an array with all of the values > 3.000000000000000e+00.
Эта функция полностью поддерживает массивы графического процессора. Для получения дополнительной информации смотрите функции MATLAB Выполнения на графическом процессоре (Parallel Computing Toolbox).
Эта функция полностью поддерживает распределенные массивы. Для получения дополнительной информации смотрите функции MATLAB Выполнения с Распределенными Массивами (Parallel Computing Toolbox).
inputParser
| is*
| isa
| isnumeric
| validatestring
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.