gpt4 book ai didi

matlab - 如何在 MATLAB 中向量化交集核函数?

转载 作者:太空宇宙 更新时间:2023-11-03 19:29:59 25 4
gpt4 key购买 nike

我需要预先计算直方图交集核矩阵,以便在 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 x 360000。

如有任何帮助,我们将不胜感激。

问候,佩云

最佳答案

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

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

要避免使用确实占用内存的 repmat,您可以使用 bsxfun 对数据应用一些基本操作,并扩展到单例维度。对于您的情况,您可以执行以下操作:

distance_kernel = @(x,Y) sum(bsxfun(@min,x,Y),2);

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

然后只需调用 pdist2 即可。

关于matlab - 如何在 MATLAB 中向量化交集核函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21114487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com