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.
任何帮助,将不胜感激.
问候,培云
我认为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就可以了。