我對8維經驗copula有以下代碼,它創建了一個8d矩陣,但我只需要在此代碼中名爲EC的矩陣的對角線。由於此代碼非常慢,是否有無需計算所有「ecop」就可以獲得「EC」?如何從這些循環中只獲得矩陣的對角線?
function EC = ecopula8d(x)
[m n] = size(x);
y = sort(x);
for r=1:m
for q=1:m
for p=1:m
for o=1:m
for l=1:m
for k=1:m
for j=1:m
for i=1:m
ecop(i,j,k,l,o,p,q,r) = sum((x(:,1)<=y(i,1)).*(x(:,2)<=y(j,2)).*(x(:,3)<=y(k,3)).*(x(:,4)<=y(l,4))...
.*(x(:,5)<=y(o,5)).*(x(:,6)<=y(p,6)).*(x(:,7)<=y(q,7)).*(x(:,8)<=y(r,8)))/(m+1);
end
end
end
end
end
end
end
end
for i=1:m
EC(i,1)=ecop(i,i,i,i,i,i,i,i);
end
嗯。這看起來像是一個合乎邏輯的表達,可以加快速度。你能用自己的話來描述你在這裏試圖實現的嗎? – knedlsepp
不知道應該做什麼我會說:因爲循環不依賴於它的計算:只需用'i'替換所有變量'j,k,l,o,p,q,r',擺脫你的外部循環,並將'ecop(i,j,k,l,o,p,q,r)'改爲'EC(i,1)' – knedlsepp
@knedlsepp我試圖找到ecop的對角線被稱爲歐共體和ecop是經驗copula這是詳細的在這裏:http://en.wikipedia.org/wiki/Copula_%28probability_theory%29#Empirical_copulas – Fred