如何在MATLAB中对交集核函数进行向量化?

Pei*_*yun 7 matlab vector vectorization bsxfun

我需要预先计算直方图交集核矩阵,以便在MATLAB中使用LIBSVM.

假设x,y是两个向量.核函数是K(x,y)= sum(min(x,y)).为了提高效率,大多数情况下的最佳做法是对操作进行矢量化.

我想要做的就像计算核矩阵一样计算两个矩阵之间的欧氏距离,如pdist2(A,B,'euclidean').在定义函数'intKernel'之后,我可以通过调用pdist2(A,B,intKernel)来计算交集核.

我知道函数'pdist2'可能是一个选项.但我不知道如何编写自定义距离函数.虽然,我不知道如何在一个压缩表达式中对矢量(1-by-M)和矩阵(M-by-N)之间的交集核心进行编码.

'repmat'可能不可行,因为矩阵真的很大,比方说,20000乘360000.

任何帮助,将不胜感激.

问候,培云

Ben*_*y13 2

我认为pdist2这是一个不错的选择,所以我帮助您定义距离函数。

根据文档,自定义距离函数必须有 2 个输入:第一个是 1×N 向量;第二个是 M×N 矩阵(注意顺序!)。

为了避免使用repmat确实消耗内存的数据,您可以对bsxfun具有单例维度扩展的数据应用一些基本操作。对于您的情况,您可以执行以下操作:

distance_kernel = @(x,Y) sum(bsxfun(@min,x,Y),2);
Run Code Online (Sandbox Code Playgroud)

对列进行求和以获得列向量作为输出。

然后只要打电话pdist2就可以了。