我的代碼工作正常,但速度很慢,我需要多次運行,所以效率很低。我認爲有一個更有效的計算方法。如何在MATLAB中更快地創建矢量和矩陣的點積?
其中k(X,Y)是兩個矢量 xi和yj的點積是i行中,兩個矩陣A的j和B,分別。
我還想指出,每個矩陣中的行數是以千計。
這裏是我的代碼
m=size(A,1);
Kxx=0;
for i=1:m
x=A(i,:);
X=A(i+1:end,:);
Kxx=Kxx+2*sum(dot(ones(m-i,1)*x,X,2));
end
Kxx=Kxx/(m*(m-1));
n=size(B,1);
Kyy=0;
for j=1:n
y=B(j,:);
YY=B(j+1:end,:);
Kyy=Kyy+2*sum(dot(ones(n-j,1)*y,YY,2));
end
Kyy=Kyy/(n*(n-1));
Kxy=0;
for i=1:m
x=A(i,:);
for j=1:n
y=B(j,:);
Kxy=Kxy+dot(x,y);
end
end
Kxy=Kxy*2/(m*n);
Dxy=Kxx+Kyy-Kxy;
加快,你需要消除所有的循環。你能描述每個循環在英語中的作用嗎? – John
我認爲最後一個塊可以寫成'Kxy = sum(sum(A * B。'));',前面的塊比較難。如果有人不抓住機會,當我有時間考慮這些情況時,我會添加一個答案。 –
這段代碼應該做什麼? – rayryeng