我想分析很多让我的程序运行缓慢的数据。 我正在读取从.txt文件到单元格数组的数据集。 我正在使用单元格数组来分类我的数据,这是两个属性的形式,我需要这些类是字符。提高嵌套循环的性能MATLAB
我想使用最近的均值分类器找到重新排列错误。 我有一个主要的外部循环,它遍历我的数据集的每一行(数以万计)。依次移除每一行,每次迭代一行。在删除线条的每次迭代中重新计算两个属性的平均值。主挂点似乎成为下一个部分,在那里我需要计算在我的数据集的每一行:
- 的数据之间上线(2个属性值)和 的欧几里得距离各自的均值我类。
- 然后我想记录其属性平均值最接近的类,这将是它的分配类。
- 最后,我想检查这个分配的类是否是正确的 类。
目前这个循环看起来像这样。
errorCount = 0;
for l = 1:20000
closest = 100;
class = 0;
attribute1 = d{2}(l);
attribute2 = d{3}(l);
for m = 1:numel(classes)
dist = sqrt((attribute1-meansattr1(m))*(attribute1-meansattr1(m)) + (attribute2-meansattr2(m))*(attribute2-meansattr2(m)));
if dist < closest
closest = dist;
class = m;
end
end
if strcmp(d{1}(l),classes(class))
%correct
else
errorCount = errorCount + 1;
end
end
d
是我的细胞阵列,其中d{2}
是保持我的属性1值的列。我通过d{1}(1)
获取了该列中第一行的这些值。
classes
是我的数据集中的独特类,所以对于我的每个类,我计算它的欧几里得距离。
meansattr1
和meansattr2
是包含我的每个属性的平均值的数组。当线被移除时,这些更新在外部循环的每次迭代中。
希望能帮助您理解我拥有的代码。非常感谢在优化和加速这些计算方面的任何帮助。
最简单的速度改进是删除'sqrt'调用。查找最近距离的平方与最近距离完全相同。 – paddy