【发布时间】:2015-03-22 13:53:25
【问题描述】:
我有以下一段 Matlab 代码,它通过多次迭代在向量和矩阵之间计算 Mahalanobis distances。我正在尝试通过矢量化找到一种更快的方法,但没有成功。
S.data=0+(20-0).*rand(15000,3);
S.a=0+(20-0).*rand(2500,3);
S.resultat=ones(length(S.data),length(S.a))*nan;
S.b=ones(length(S.a),3,length(S.a))*nan;
for i=1:length(S.data)
for j=1:length(S.a)
S.a2=S.a;
S.a2(j,:)=S.data(i,:);
S.b(:,:,j)=S.a2;
if j==length(S.a)
for k=1:length(S.a);
S.resultat(i,k)=mahal(S.a(k,:),S.b(:,:,k));
end
end
end
end
我现在已经修改了代码并避免了其中一个循环。但它仍然很长。如果有人有想法,我将非常感激!
S.data=0+(20-0).*rand(15000,3);
S.a=0+(20-0).*rand(2500,3);
S.resultat=ones(length(S.data),length(S.a))*nan;
for i=1:length(S.data)
for j=1:length(S.a)
S.a2=S.a;
S.a2(j,:)=S.data(i,:);
S.resultat(i,j)=mahal(S.a(j,:),S.a2);
end
end
【问题讨论】:
-
那个函数
mahal是什么? -
如果不知道
mahal函数的作用,将很难提供任何帮助。mahal可以对数组进行操作吗?另外,S.b和S.a的大小是多少? -
您是否正在计算一系列不同向量 a 和矩阵 B 的马氏距离 a'*inv(B)*a?
-
另外,您的结果似乎并不依赖于循环变量 i
-
S.b如何依赖于i?data的作用是什么?
标签: performance matlab optimization matrix vectorization