在matlab中优化距离计算

时间:2011-09-27 13:16:55

标签: optimization matlab distance

我是Matlab的新手,我有以下场景(这是一个更大问题的一部分)。

矩阵A,4754x1024,矩阵B,6800x1024行。

对于矩阵A中的每一行,我需要计算矩阵B中的欧氏距离。我使用以下技术计算距离,但我发现这在Matlab中非常低效且非常耗时。

for i=1:row_A
  A_data=A_test(i,:);
  for j=1:row_B
     B_data=B_train(j,:);
     X=[A_data;B_data];
     %calculate distance
     d=pdist(X,'euclidean');
     dist(j,i)=d;
  end
end

任何优化此建议的建议,因为最后一步涉及在50个这样的A和B集上执行此操作。

谢谢和问候,

Bhavya

1 个答案:

答案 0 :(得分:1)

我不确定你的代码实际上在做什么。

假设您的数据具有以下属性

assert(size(A,2) == size(B,2))

尝试

d = zeros(size(A,1), size(B,1));
for i = 1:size(A,1)
    d(i,:) = sqrt(sum(bsxfun(@minus, B, A(i,:)).^2, 2));
end

或者可能按列更好地组织(请参阅http://www.mathworks.co.uk/company/newsletters/news_notes/june07/patterns.html中的“在列中存储和访问数据”):

At = A.'; Bt = B.';
d = zeros(size(At,2), size(Bt,2));
for i = 1:size(At,2)
    d(i,:) = sqrt(sum(bsxfun(@minus, Bt, At(:,i)).^2, 1));
end