Проверяйте валидность массива
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
как валидирующая функция для 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
A
- ВходВход, заданный как любой тип массива.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| char
| string
| struct
| cell
| function_handle
Поддержка комплексного числа: Да
classes
- Допустимые типы данныхДопустимые типы данных, заданные как вектор символов, массив ячеек из векторов символов или строковые массивы. Каждый элемент 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 |
'< | Любое другое имя класса |
Типы данных: cell
| string
attributes
- Действительные атрибутыДопустимые атрибуты, заданные как массив ячеек или строковые массивы.
Некоторые атрибуты также требуют числовых значений, таких как атрибуты, которые задают размер или количество элементов 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', 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.
The 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.
Эта функция полностью поддерживает массивы GPU. Для получения дополнительной информации смотрите Запуск функций MATLAB на графическом процессоре (Parallel Computing Toolbox).
Эта функция полностью поддерживает распределенные массивы. Для получения дополнительной информации смотрите Запуск функций MATLAB с распределенными массивами (Parallel Computing Toolbox).
arguments
| inputParser
| is*
| isa
| isnumeric
| validatestring
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.