不幸的是,
我想在Matlab。这意味着我需要为X
的每一行x
计算k(x,y)
以及CCD_ 5的每一行CCD_。下面是一些matlab代码,可以计算出像,但它相当慢,
function K=compute_kernel( k_func, X, Y )
m = size(X,1);
n = size(Y,1);
K = zeros(m,n);
for i = 1:m
for j = 1:n
K(i,j) = k_func(X(i,:)', Y(j,:)');
end
end
end
有没有其他方法来解决这个问题,例如bsxfun
变体对取自X
和Y
的每一行调用一个函数?
pdist2(X,Y, dist_func)
计算的是dist_func(X, Y(i,:))
,而不是dist_func(X(i,:), Y(i,:))
。所以我需要的实际功能是,
function K=compute_kernel( k_func, X, Y )
% Woohoo! Efficient way to compute kernel
size(X)
size(Y)
m = size(X,1);
n = size(Y,1);
for i = 1:n
K(:,i) = pdist2( Y(i,:), X, k_func);
end
它不如仅仅使用pdist2
那么好,但仍然比以前的情况高效得多。
你厌倦了pdist2
的自定义距离功能吗?
第页。S.
在Matlab 中最好不要使用i
和j
作为变量