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