【发布时间】:2015-03-22 02:46:54
【问题描述】:
我正在尝试编写一个函数来计算所有行向量的一对一曼哈顿距离,有一个名为 mandist() 的内置函数属于 ANN 工具箱 --
data = rand(4,2);
disp(data)
mandist(data')
>> mdtest
0.7996 0.8884
0.5735 0.4954
0.9732 0.3516
0.6341 0.7142
ans =
0 0.6191 0.7104 0.3397
0.6191 0 0.5435 0.2793
0.7104 0.5435 0 0.7018
0.3397 0.2793 0.7018 0
我想知道是否可以使用bsxfun 优化mandist()。
bsxfun 版本如下所示--
[r,~] = size(rand);
abs(bsxfun(@minus, ...
repmat(permute(data, [1 3 2]),1,r), ...
repmat(permute(data, [3 1 2]),r,1)))
以上语句可以生成计算abs(a - b)的所有矩阵--
ans(:,:,1) =
0 0.2261 0.1736 0.1656
0.2261 0 0.3997 0.0605
0.1736 0.3997 0 0.3392
0.1656 0.0605 0.3392 0
ans(:,:,2) =
0 0.3930 0.5368 0.1742
0.3930 0 0.1438 0.2188
0.5368 0.1438 0 0.3626
0.1742 0.2188 0.3626 0
现在我想一次性全部添加,可以吗?
【问题讨论】:
标签: matlab matrix lambda vectorization bsxfun