在矩阵的行上调用泛型函数

时间:2013-02-20 14:11:00

标签: matlab machine-learning bsxfun

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

2 个答案:

答案 0 :(得分: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那么好,但仍然比以前的情况更有效。

答案 1 :(得分:0)

您是否厌倦了pdist2自定距离功能?

P.S。
最好是not to use i and j as variables in Matlab