并感谢您对我的帖子表现出兴趣:)
让我快速描述一下我正在使用的数据:
我是 excel 中的重要数据到我的 matlab 脚本中,所以我最终得到了 3 个向量。这些是:
- “FIT_txt”(约 250k 行,每个单元格中包含混合字母和数字。重复条目)
- “FIT_num”(与仅包含数字的“FIT_txt”相同的行数)
- “扇区”(约 5k 行,每个单元格中包含混合字母和数字。唯一条目)
现在,我想要实现的目标:
创建一个向量,计算“扇区”中每一行出现在“FIT_txt”中的次数。例如:假设“sector”中的第一个条目是“AB10”,那么我想创建一个向量来计算“AB10”在“FIT_txt”中出现的次数;这应该保存在新向量的第一行。新向量的第二行计算“FIT_txt”中“扇区”(比如“AB11”)中第 2 行的出现次数等。
创建一个向量,将“FIT_num”中出现在与“FIT_txt”中对应于“扇区”条目的条目在同一行中的所有数字相加,并相应地对其进行排序。例如:“扇区”的第 1 行中的“AB10”在“FIT_txt”中出现 3 次 - 它出现在第 2、500 和 2000 行。我想将“FIT_num”中的第 2、500 和 2000 行相加并将它们放入新向量的第一行。
现在,这是我的问题的简化;本质上,我正在使用更多数据,并且我正在重复此过程以找到更多数量的新向量/矩阵。关于简化,我已经设法通过这样做来解决问题:
units = zeros(length(sector),1);
installed = zeros(length(sector),1);
for a = 1:length(sector)
for z = 1:length(FIT_txt(:,1))
if strcmp((FIT_txt(z,1)),(sector(a)))==1
units(a,1) = units(a,1) + 1;
installed(a,1) = installed(a,1) + FIT_num(z,1);
end
end
end
不幸的是,我担心这是非常低效的,并且计算时间太长。
我已经成功地使用以下方法为我的第一个问题(计算出现次数)取得了不错的结果:
units = zeros(length(sector),1);
for a = 1:length(sector)
units(a,1) = sum(strcmp((FIT_txt(:,1)),(sector(a)))
end
这很好用(虽然仍然比我想要的要长一点),但是,我不知道如何解决我的第二个问题(计算“FIT_num”中对应的值)。
如果您能帮助我找到一个尽可能有效地解决我的问题的解决方案,我将不胜感激。
非常感谢您提前。
约翰