我是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
答案 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