matlab - 多个嵌入 for 循环的向量化

标签 matlab for-loop vectorization

我有以下代码,其中包含 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/

相关文章:

r - 显示进度 R2WinBugs

javascript - 为什么以及何时 for 循环忽略 html 集合中的某些项目

python - 向量化嵌套的 for 循环 Python

matlab - 信号 Simulink 的初始值

Matlab 神经网络 - 与divideFcn 一样的divideblock 出现问题

oop - 递归调用一个类(实现链表)

arrays - 在 for 循环中找到了 2 个带有 ',' 运算符的线性 C 解决方案,有人可以解释给定的逗号运算符语句吗?

python - 具有不同位置的 NumPy 索引

python - 矢量化 np 逻辑 : zeroing out in z axis above point

matlab - 在 MATLAB 中优化手动编码的 k 均值?