2015-11-01 4 views
0

Я пытаюсь найти способ сделать цикл for, в котором я могу сравнить две ячейки, которые дадут мне два разных средства. Один для класса char, а другой для класса double.Как я могу пропустить только определенные части массива ячеек?

Это то, что у меня есть до сих пор.

V = {2; 'tree'; 3; 'hope'}; 
W = {2; 'tree'; 3; 'hope'}; 


for i = 1:length(V); 
    if isequal(class(V{i}), 'double') 
     num = V{i} 
    elseif isequal(class(V{i}), 'char') 
     str = V{i} 
    end 
end 
for i = 1:length(W); 
    if isequal(class(W{i}), 'double') 
     acc_n(i) = isequal(V{i}, W{i}) 
    elseif isequal(class(W{i}), 'char') 
     acc_s(i) = strcmp(V{i}, W{i}) 
    end 
end 
mean_d = mean(acc_n) 
mean_s = mean(acc_s) 

Выход я получаю:

acc_n = 
    1  0  1 
acc_s = 
    0  1  0  1 
mean_d = 
    0.6667 
mean_s = 
    0.5000 

Выход я хочу это:

1 1 для строки, mean = 1. 1 1 for double, mean = 1

Как я могу сделать цикл, где он принимает только номера ячейки и слова ячейки отдельно?

Есть ли какой-либо возможный способ только прокрутить слова или цифры?

ответ

0

Вы можете сначала извлечь строки и удвоить и обработать их отдельно, что позволит избежать циклов.

V = {2; 'tree'; 3; 'hope'}; 
W = {2; 'tree'; 3; 'hope'}; 

VChar=V(cellfun(@ischar,V)); 
WChar=W(cellfun(@ischar,W)); 

acc_s=VChar==WChar; 

VNum=cell2mat(V(cellfun(@isnumeric,V))); 
WNum=cell2mat(W(cellfun(@isnumeric,W))); 

acc_n=VNum==WNum; 

Loop version: Я не тестировал это, но он должен работать.

%Assumes V and W have equal number of elements. 

acc_n=[]; 
acc_s=[]; 
for i=1:numel(V) 
    if isequal(class(V{i}), 'double') && isequal(V{i},W{i}) 
     acc_n=[acc_n true]; 
    elseif isequal(class(V{i}), 'char') && strcmp(V{i},W{i}) 
     acc_s=[acc_s true]; 
    end 
end 
+0

Есть ли альтернативный способ сделать это без использования cellfun? – user2924450

+0

Также, как использовать цикл для этого? – user2924450

+0

@ user2924450 Я думаю, что цикл будет прекрасным, поскольку 'cellfun' иногда хуже, чем циклы. См. [Здесь] (http://stackoverflow.com/questions/18284027/cellfun-versus-simple-matlab-loop-performance). См. Мое редактирование. –

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