1

Matlab で一般的なカーネル関数のカーネル行列を効率的に計算したいと考えています。これは、 のすべてのk(x,y)行 と のすべての行xを計算する必要があることを意味します。ここに私が望むものを計算するいくつかのmatlabコードがありますが、かなり遅いです.XyY

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

4

2 に答える 2

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ほど良くはありませんが、前のケースよりもはるかに効率的です。

于 2013-02-20T15:10:36.597 に答える
0

pdist2カスタム距離機能に飽きましたか?

PSMatlabでは変数として使用
ない ことをお勧めしますij

于 2013-02-20T14:23:20.043 に答える