【发布时间】:2012-02-21 03:26:12
【问题描述】:
我有两个不同长度的字符串元胞数组,d={'nerve','body','muscle','bone'} 和 e={'body','body','muscle'}。我必须比较这两个数组并计算 e 中每个字符串在 d 中的出现次数。预期的结果应该是一个向量,count_string=(0,2,1,0)。 以下是我编写的代码,但出现错误:单元格内容分配给非单元格数组对象。我是matlab编程的初学者。非常感谢您对此的任何快速帮助。
count_string=size(d)
for i=1:length(d)
count_string{i}=sum(ismember(e{i},d));
end
根据您的所有以下建议,这是我拥有的模块。
for i=1:length(d_union)
count_string1=cellfun(@(x) sum(ismember(d1,x)), d_union);
count_string2=cellfun(@(x) sum(ismember(d2,x)), d_union);
count_string3=cellfun(@(x) sum(ismember(d3,x)), d_union);
count_string4=cellfun(@(x) sum(ismember(d4,x)), d_union);
count_string5=cellfun(@(x) sum(ismember(d5,x)), d_union);
count_string6=cellfun(@(x) sum(ismember(d6,x)), d_union);
count_string7=cellfun(@(x) sum(ismember(d7,x)), d_union);
count_string8=cellfun(@(x) sum(ismember(d8,x)), d_union);
count_string9=cellfun(@(x) sum(ismember(d9,x)), d_union);
count_string10=cellfun(@(x) sum(ismember(d10,x)), d_union);
count_string11=cellfun(@(x) sum(ismember(d11,x)), d_union);
count_string12=cellfun(@(x) sum(ismember(d12,x)), d_union);
count_string13=cellfun(@(x) sum(ismember(d13,x)), d_union);
count_string14=cellfun(@(x) sum(ismember(testdoc,x)), d_union); end
我的 matlab 编译器要花很长时间才能执行这个模块。 'd_union' 是一个 1x1216 单元阵列,每个 d1 到 testdoc 大约是 1x240 单元阵列。我必须计算从上述操作中得到的向量的余弦相似度。有没有办法加快这个过程?请帮忙。谢谢你。
【问题讨论】:
-
你有使用字符串吗?看起来您可能拥有的字符串数量很少;你不能用一个数字替换每个字符串吗?这可能会加快速度!
-
好吧,我必须使用字符串。我正在阅读一个包含多个文档段落 d1 到 d13 的文本文件。我必须使用这些来执行其他计算。所以,我不确定用数字替换每个字符串是否适合我。还有其他方法吗?
-
你不需要 for 循环,
cellfun会处理这个问题。您只是多次运行相同的代码并获得相同的结果。