我有以下代码,其中包含 3 个迭代 for 循环,以便创建上对角矩阵,我计划多次对大型数据集执行操作,并希望尽可能提高计算效率。
data = magic(3);
n = size(data,1);
W = zeros(n,n);
for i = 1:n
for j = i:n
if i==j
W(i,j)=0;
else
for k = 1:n
temp(1,k) = (data(i,k)-data(j,k))^2;
sumTemp = sumTemp + temp(1,k);
end
W(i,j)=sqrt(sumTemp);
end
temp = 0;
sumTemp = 0;
end
end
答案应如下所示:
[0 6.4807 9.7980
0 0 6.4807
0 0 0]
我现在正在努力工作,但我想我会把它扔在那里,以防有人有任何建议可以节省我几个小时的时间。
最佳答案
这是我现在拥有的帽子:
data = magic(3);
n = size(data,1);
W = zeros(n,n);
for i = 1:n
for j = i+1:n
W(i,j)= norm(data(i,:)-data(j,:))
%W(i,j)= sqrt(sum((data(i,:)-data(j,:)).^2));
end
end
我做了什么:
- 向量化内循环
- 删除了未使用的 www
- 更改了第二个循环,从 i+1 开始,因为 i=j 没有执行任何操作
- 将 sqrt((a-b).^2) 替换为norm(a-b)
现在是“完整”矢量化:
data = magic(3);
n = size(data,1);
W = zeros(n,n);
tri=triu(ones(n,n),1)>0;
[i,j]=find(tri);
W(tri)=arrayfun(@(i,j)norm(data(i,:)-data(j,:)),i,j)
关于matlab - 多个嵌入 for 循环的向量化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19573700/