我想分析很多讓我的程序運行緩慢的數據。 我正在讀取從.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