簡體   English   中英

您可以減少此Matlab代碼的計算時間嗎?

[英]Can you decrease computational time of this matlab code?

k=3000
UnqLab = unique(TrainingLabels)
n = length(UnqLab)
count=hist(TrainingLabels,UnqLab); 
num = 1;
for i = 1:n
    fprintf('\n %i',i)
    nn = count(i)
    for j = 1:nn
        NTrainingFeatures(num,:) = TrainingFeatures(num,ranking(i,1:k))
        num = num +1;
    end
end

這里TrainingLabel的大小為21,000 * 1,並包含257個標簽,按排序順序。 例如001,001,001,001,001,001 ..... 002,002,002 ....... 257,257。

TrainingFeatures的大小為21,000 * 4096,其中包含一些值。

排名是257 * 4096。 例如,排名包含排名(3076,456,765,4000,87,5,.....)。 這就是第一行的樣子。 這意味着, TrainingFeatures中3076處的所有第一個標簽條目均已排名第一。

此代碼需要太多的計算tme(以天為單位)。 有什么辦法可以減少時間。 Matlab或Python中的代碼將起作用。

通常,在MATLAB中您要避免循環。 特別是,看起來最大的問題是內部循環。 而不是單步執行count(i) ,一次復制整個塊會更快。 這應該是可能的,因為看起來您每次都使用相同大小的TrainingFeatures塊(i和k都不依賴循環)。 所以你應該能夠做類似的事情

NTrainingFeature(num:num+count(i),:) = TrainingFeatures(num:num+count(i),ranking(i,1:k));
num = num + count(i) + 1;

我一定會對此進行測試(也許是在數據的子集或較小的矩陣上),以確保所有內容正確排列。 如果無法訪問您的代碼進行測試,則可能在設置索引時犯了一個錯誤,或者矩陣形狀不匹配。 如果您無法讓矩陣索引和形狀reshape() ,可以嘗試使用reshape()或單索引調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM