下面这段高效的向量化 Matlab 代码使用一个权重向量 WTS(每个维度一个权重;所有点使用相同的权重)计算两组点 A 和 B 之间的加权欧几里得距离:
WTS = sqrt(WTS);
% modify A and B against weight values
A = WTS(ones(1,size(A,1)),:).*A;
B = WTS(ones(1,size(B,1)),:).*B;
% calculate distance
AA = sum(A.*A,2);
BB = sum(B.*B,2)';
D = sqrt(AA(:,ones(1,size(B,1))) + BB(ones(1,size(A,1)),:) - 2*A*B');
(来源:https://github.com/nolanbconaway/pairdist/blob/master/pairdist.m)
我的问题是:是否有一种有效的向量化形式(Matlab、R或Julia都可以),用于类似的计算,但WTS是与A相同大小的权重向量集合?换句话说,我需要为A中的每个点提供1个权重向量,而不是一个权重向量。
这个答案似乎可以满足我的需求,但它是用Python编写的,我不确定如何将其转换为Matlab/R/Julia:https://dev59.com/JHfZa4cB1Zd3GeqPV8qN#19285289
此外,这不是Efficiently calculating weighted distance in MATLAB的重复,因为那个问题涉及单个权重向量情况,而我明确要求N个权重向量情况。
编辑:示例应用程序:RBF网络和高斯混合模型,其中您可以为每个神经元/组件拥有1个权重向量。对于这些类型的问题,有效的解决方案至关重要。
Float32
。使用默认的Float64
进行测试的结果是1.73
、81.22
、23.50
和2.81
秒。 - rahnema1A
和B
具有相同的大小,W
是一个向量,但OP希望A
和B
具有不同的大小,并且W
是一个与A
大小相同的矩阵。你能展示一下你的代码吗? - rahnema1