#matlab
#matlab
Вопрос:
У меня есть функция, которая обрабатывает вектор строки. Я хочу сделать его универсальным для любого типа входного вектора. Будь то столбец или строка. Я подумал, что одним из решений является сохранение существующей реализации и проверка входного вектора для типа столбца или строки. Как я могу выполнить эту проверку? функции iscolumn() или isrow() здесь не работают!
Комментарии:
1. Почему
isrow()
иiscolumn()
не работают?
Ответ №1:
Сначала убедитесь, что входные данные являются вектором. здесь может помочь isvector. Или используйте size или любое из множества различных ухищрений.
Во-вторых, преобразуйте ваш вектор в вектор-столбец.
vec = vec(:);
В-третьих, напишите свой код так, чтобы всегда ожидать вектор столбца, поскольку vec(:) делает это.
Наконец, сохраните исходную форму вашего вектора и измените форму любого выходного вектора, который, как ожидается, будет иметь ту же форму, что и входной. Итак, ваш окончательный код должен выглядеть примерно так…
% test for errors
if ~isvector(vec)
error('The sky is falling')
end
% convert to column form always
vecshape = size(vec);
% process the vector
outputvec = ... % do stuff here
% reshape the output to be the same shape as the input
outputvec = reshape(outputvec,vecshape);
Комментарии:
1. Кроме того, если OP не хочет менять свой код с обработки векторов строк на векторы столбцов, он может выполнять
vec=vec(:).';
и использовать свою функцию без изменений.
Ответ №2:
Проверьте размер вектора с помощью size
— если в нем один столбец и много строк, ваша функция может вызвать саму себя с транспонированным вариантом.