次の問題がありますA
。サイズが 16x22440 のマトリックスがあります。
私がする必要があるのは、この行列の各行を正規化して、それぞれのノルムが 1 になるようにすることです ( for n=1:16 norm(A(n,:))==1
)
どうすればmatlabでそれを達成できますか?
編集: この行列の各行は、160x140 の画像から作成されたベクトルであるため、個別に考慮する必要があります。固有面行列を作成するには、値を正規化する必要があります。
次の問題がありますA
。サイズが 16x22440 のマトリックスがあります。
私がする必要があるのは、この行列の各行を正規化して、それぞれのノルムが 1 になるようにすることです ( for n=1:16 norm(A(n,:))==1
)
どうすればmatlabでそれを達成できますか?
編集: この行列の各行は、160x140 の画像から作成されたベクトルであるため、個別に考慮する必要があります。固有面行列を作成するには、値を正規化する必要があります。
Matlab のインストールに Neural Network Toolbox が含まれていますか? もしそうなら、試してみてくださいnormr
:
nA = normr(A);
それ以外の場合、@Shai のソリューションは、無限またはNaN
入力を処理しないことを除いて優れています。後で未定義のノルム ケースをチェックする方がはるかに安全です。
nA = bsxfun(@rdivide,A,sqrt(sum(A.^2,2)));
nA(~isfinite(nA)) = 1; % Use 0 to match output of @Shai's solution, Matlab's norm()
長さがゼロ (すべてゼロのコンポーネント) または無限の長さのベクトル (1 つ以上のコンポーネント+Inf
または-Inf
) またはコンポーネントを含むベクトルの正規化は、NaN
実際には明確に定義されていないことに注意してください。上記のソリューションは、Matlab のnormr
関数と同様に、すべて 1 を返します。norm
ただし、Matlab の関数は異なる動作を示します。たとえば、警告またはエラー、すべてゼロ、NaN、ベクトルの長さでスケーリングされたコンポーネントなど、別の動作を指定したい場合があります。このスレッドでは、長さゼロのベクトルの問題についてある程度議論しています。ゼロベクトル?.