开发者

optimise distance calculation in matlab

I am a newbie with Matlab and I have the following scenario( which is part of a larger problem).

matrix A with 4754x1024 and matrix B with 6800x1024 rows.

For every row in matrix A i need to calculate the euclidean distance in matrix B. I am using the following technique to calculate the distance but I find that this is very inefficie开发者_如何学编程nt and very time consuming in 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

Any suggestions to optimise this because the final step involves performing this operation on 50 such sets of A and B.

Thanks and Regards,

Bhavya


I'm not sure what your code is actually doing.

Assuming your data has the following properties

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

Try

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

Or possibly better organised by columns (See "Store and Access Data in Columns" in 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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜