Проверка наличия вектора строки или столбца в matlab

#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 — если в нем один столбец и много строк, ваша функция может вызвать саму себя с транспонированным вариантом.