我需要为corr具有不同长度的矢量对(例如,5元素向量到20元素向量)计算Spearman的秩相关(使用函数).对于每个长度,对的数量通常在300对以上.我跟踪进度waitbar.我注意到9元素矢量对需要非常长的时间,其他长度(越来越大)需要非常短的时间.由于公式完全相同,因此问题必须源于MATLAB函数corr.
我编写了以下代码来验证问题是否与corr函数有关,而不是除了'corr'之外的其他计算,其中所有计算(包括'corr')都发生在2或3'for'循环内.代码重复50次,以避免意外结果.
结果是一个条形图,证实了MATLAB计算9元素向量的Spearman秩相关需要很长时间.由于我的计算并不那么重,这个问题不会导致无休止的等待,只会增加整个过程所消耗的总时间.有人能告诉我导致问题的原因以及如何避免这个问题?
Times1 = zeros(20,50);
for i = 5:20
for j = 1:50
tic
A = rand(i,2);
[r,p] = corr(A(:,1),A(:,2),'type','Spearman');
Times1(i,j) = toc;
end
end
Times2 = mean(Times1,2);
bar(Times2);
xticks(1:25);
xlabel('number of elements in vectors');
ylabel('average time');
Run Code Online (Sandbox Code Playgroud)