2013-02-20 60 views
1

我想在 Matlab中高效地計算通用內核函數的內核矩陣。這意味着我需要計算k(x,y)的每行xXY的每行y。這裏是計算什麼我倒是 像一些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變體 調用每一行取自XY的函數?

回答

1

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,但仍比前一種情況更爲有效。