2

512x512 の次元ベクトルを格納する 512x512x3 の行列があります。結果が長さ 1 の 512x512 ベクトルになるように、これらすべてのベクトルを正規化する最良の方法は何ですか?

現時点では for ループを使用していますが、それが MATLAB での最善の方法だとは思いません。

4

1 に答える 1

4

ベクトルがユークリッドの場合、それぞれの長さはその座標の平方和の平方根です。各ベクトルが単位長になるように個別に正規化するには、その座標をそのノルムで割る必要があります。その目的のために、次を使用できますbsxfun

norm_A = sqrt(sum(A .^ 2, 3)_;   %// Calculate Euclidean length
norm_A(norm_A < eps) == 1;       %// Avoid division by zero
B = bsxfun(@rdivide, A, norm_A); %// Normalize

A元の 3 次元ベクトル行列です。

編集:Shai のコメントに続いて、null ベクトルのゼロ除算を回避するための修正を追加しました。

于 2013-06-11T16:07:26.937 に答える