我有一个像这样的小代码。任何人都可以告诉我迭代的目的是什么? 我可以看到迭代前后的结果差异,我只是无法理解是什么 迭代的目的是什么?非常感谢!
A = randn(n,m);
for i=1:m
A(:,i) = A(:,i) / norm(A(:,i));
end
答案 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)
在旁注中,我建议不要在计算表达式时分配同一个变量。