1

我想为 Matlab 中的通用核函数有效地计算核矩阵。这意味着我需要k(x,y)为每一行xX 每一行y计算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变体在从Xand获取的每一行上调用一个函数Y

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了自定义距离功能?

PS
最好不要在Matlab中使用iand作为变量j

于 2013-02-20T14:23:20.043 回答