我的代码工作但是它相当慢,我需要多次运行它,因此效率非常低.我很肯定有一种更有效的计算方法.
其中k(x,y)是两个矢量xi和yj的点积,分别是两个矩阵A和B的行i,j.
我还要注意每个矩阵中的行数是数千.
这是我的代码
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;
Run Code Online (Sandbox Code Playgroud)