我是Matlab的新手,但我正在努力。 我有以下代码:
for t = 1:size(data,2)
b = data(t)/avevalue;
if b >= 1
cat1 = [repmat((avevalue),floor(b),1)',mod(data(t),15)];
else
cat1 = data(t);
end
modified = [modified,cat1];
end
的答案
data=[16 18 16 25 17 7 15];
avevalue=15;
是
15 1 15 3 15 1 15 10 15 2 7 15 0
但是当我的阵列超过10000个元素时,它的工作非常非常缓慢(例如,100000近3分钟)。我怎样才能提高它的速度?
答案 0 :(得分:2)
缓慢有两个主要原因:
您可以通过尝试以下方法来改善运行时间:
%auxilliary array
divSumArray = ceil((data+1)/avevalue);
%defines output array
newArr = ones(1,sum(divSumArray))*avevalue;
%calculates modulo
moduloDataIndices = cumsum(divSumArray);
%assigning modulo in proper location
newArr(moduloDataIndices) = mod(data,avevalue);
最终结果
15 1 15 3 15 1 15 10 15 2 7 15 0
时间测量
我测量了以下输入的运行时间:
n = 30000;
data = randi([0 99],n,1);
avevalue=15;
原来的算法:
Elapsed time is 11.783951 seconds.
优化算法:
Elapsed time is 0.007728 seconds.