2012-06-15 4 views
1

У меня есть данные:MATLAB определить, если клетки массива является строка

data = 

{1x6 cell} {1x6 cell} 

Я хочу знать, если данные {2: конец} является строкой, поэтому я использовал:

stop = 0; 
for (k=2:length(data)) 
    if isrow(data{k}) 
     stop = 1; 
    end 
end 

но , функция 'isrow' не работает для аргументов типа 'cell'.

Я читал об этом, и есть функция: «cell2struct»:

structArray = cell2struct(cellArray, fields, dim); 

, но я не думаю, что я смогу использовать это, потому что я должен дать «поля» и 'dim' к этой функции.

ответ

1

Я не очень понимаю, в чем проблема здесь. Это то, что я получаю на R2010b:

>> data = {cell(1,6) cell(1,6) cell(3,6)} 
data = 
    {1x6 cell} {1x6 cell} {3x6 cell} 

>> isrow(data{2}) 
ans = 
    1 

>> isrow(data{3}) 
ans = 
    0 
+0

возможно потому, что у меня есть 2010 a:/ –

+1

Возможно, вы могли бы попробовать 'size()' вместо этого. –

+0

Я думаю, что это может быть отличная идея, я пытаюсь .. –

1

Попробуйте проверить это по-другому:

function bIsRow = isrow(x) 
     bIsRow = (size(x,2) == numel(x)); 
    end 
+0

Я думаю, что это не работает:/если у меня есть данные = {1x6 cell} {6x1 cell}, поэтому bIsRow = 1 для данных (данные {1} и данных {2}) –

+0

спасибо за ваш ответ, я получил решение:] –

+2

Переключение 'length (x)' with 'size (x, 2) 'должен делать трюк. –

0

Попробуйте

if isrow(cell2mat(data{k})) 
+0

спасибо, но я горжу ошибку: ??? Неопределенная функция или метод 'isrow' для входных аргументов типа 'char'. –

0

Вы можете использовать следующий код для isrow()

function Y = isrow(X) 
% 
% ISROW True for row vectors. 
% 
% Y = ISROW(X) returns logical 1 if X is a row vector, 0 otherwise. 
% ISROW returns 1 for scalars also. 
% 
% See also: ISCOL. 
% 

if ndims(X)==2 & size(X,1)==1 & size(X,2)>=1 
    Y = logical(1); 
else 
    Y = logical(0); 
end 

Source via MATLAB Central

Смежные вопросы