代码中迭代的目的是什么?

时间:2014-10-21 02:27:10

标签: matlab

我有一个像这样的小代码。任何人都可以告诉我迭代的目的是什么? 我可以看到迭代前后的结果差异,我只是无法理解是什么 迭代的目的是什么?非常感谢!

A = randn(n,m);   

    for i=1:m                  

        A(:,i) = A(:,i) / norm(A(:,i));
    end

2 个答案:

答案 0 :(得分:3)

确保A中的每个列都标准化为具有单位长度。

A(:,1)为您提供A的第一列,norm(A(:,1))为您提供A第一列定义的向量的欧几里德范数(或长度)。

你不能做A=A/norm(A)的原因是因为Matlab将计算矩阵范数,而不是单独计算每列的范数。

有一个Matlab内置函数可以为您执行此操作:normc

答案 1 :(得分:1)

就像大卫说的那样,它给出了每个列的单位长度,而且由于他提到的原因你不能A/norm(A),但你可以这样做:

bsxfun(@rdivide, A, sqrt(sum(A.^2,1)))

就像虚拟的那样:

A ./ repmat(sqrt(sum(A.^2,1)),size(A,1),1)

在旁注中,我建议不要在计算表达式时分配同一个变量。