2014-10-21 4 views
1

У меня такой маленький код. Может ли кто-нибудь сказать мне, в чем цель итерации?
Я вижу разницу результатов до и после итерации, я просто не могу понять, что такое цель итерации? Большое спасибо!Какова цель итерации кода?

A = randn(n,m); 

    for i=1:m     

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

ответ

3

Это гарантирует, что каждый столбец в A нормализуется до единицы длины.

A(:,1) дает первый столбец A и norm(A(:,1)) дает евклидову норму (или длину) вектора, определяемого первой колонке A.

Причина, по которой вы не можете сделать A=A/norm(A), состоит в том, что Matlab будет вычислять матричную норму, а не норму каждого столбца отдельно.

Существует встроенная функция Matlab, которая сделает это за вас: normc.

+0

Спасибо! Можете ли вы сказать мне, в чем преимущество нормализации матрицы, чтобы иметь единицу длины? И какова цель zscore (A)? И в чем разница между ними? –

+0

Предположительно нормализация столбцов матрицы необходима для того, чтобы алгоритм был частью! О zscore, это то, что лучше всего объясняется учебником по вводной статистике. – David

+0

Большое вам спасибо! –

1

Как сказал Давид, это дает каждому единичную длину колонки, и вы не можете сделать A/norm(A) по причинам, он упомянул, но вы можете сделать:

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

который, как фактически делает:

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

На стороне примечания я бы посоветовал не назначать одну и ту же переменную при вычислении выражения.

+0

Также спасибо! –

+1

@PeterLi Не нужно благодарить, просто проголосуйте. – chappjc

Смежные вопросы