4

次の問題がありますA。サイズが 16x22440 のマトリックスがあります。

私がする必要があるのは、この行列の各行を正規化して、それぞれのノルムが 1 になるようにすることです ( for n=1:16 norm(A(n,:))==1)

どうすればmatlabでそれを達成できますか?

編集: この行列の各行は、160x140 の画像から作成されたベクトルであるため、個別に考慮する必要があります。固有面行列を作成するには、値を正規化する必要があります。

4

2 に答える 2

3

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、ベクトルの長さでスケーリングされたコンポーネントなど、別の動作を指定したい場合があります。このスレッドでは、長さゼロのベクトルの問題についてある程度議論しています。ゼロベクトル?.

于 2013-05-12T18:00:26.400 に答える