我如何只循环遍历单元格数组的某些部分?

时间:2015-11-01 22:01:23

标签: string matlab loops mean cell-array

我试图想出一种方法来制作一个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 = 11 1代表双倍mean = 1

如何进行循环,只分别取出单元格的数字和单元格的单词?

有没有办法只循环使用单词或数字?

1 个答案:

答案 0 :(得分: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;

循环版本:我没有测试过这个但它应该可以工作。

%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