ahm*_*ini 4 matlab distance matrix linear-algebra vectorization
我有很多点,我想建立距离矩阵,即每个点与所有其他点的距离,但我不想使用循环,因为花太多时间...是一个更好的方法来构建这个矩阵?这是我的循环:对于一个大小为10000x3的setl,这种方法需要花费我很多时间:(
for i=1:size(setl,1)
for j=1:size(setl,1)
dist = sqrt((xl(i)-xl(j))^2+(yl(i)-yl(j))^2+...
(zl(i)-zl(j))^2);
distanceMatrix(i,j) = dist;
end
end
Run Code Online (Sandbox Code Playgroud)
A. *_*nda 18
使用一些线性代数怎么样?两个点的距离可以从它们的位置矢量的内积计算出来,
D(x,y)=∥y - x∥=√(x T x + y T y - 2 x T y),
并且可以通过简单的矩阵运算获得所有点对的内积.
x = [xl(:)'; yl(:)'; zl(:)'];
IP = x' * x;
d = sqrt(bsxfun(@plus, diag(IP), diag(IP)') - 2 * IP);
Run Code Online (Sandbox Code Playgroud)
对于10000点,我得到以下时间结果: