2011-09-15 18 views
0

私はMATLABの初心者です。この質問が既に繰り返されている場合は謝罪します。matlabの配列操作

私は行列を持っています。ここで、各行はベクトルです。私は各ベクトルを単位に正規化しようとしています。 私は各行ベクトルを抽出し、それを正規化することができる午前以下

vector_b=zeros(1,1); 
    normVector_b=zeros(1,1); 
    for i=1:3 
     b=a(i,:); 
     vector_b=[vector_b,b]; 
      norm_b=b/norm(b); 
      normVector_b=[normVector_b,norm_b]; 
      end 

を試みたが、私は事前に割り当てエラーを取得したことなく、いくつかの値にVECTOR_BとnormVector_bをintiliseしなければなりません。 しかし、私は、これは結果の最初の要素をinitailize場合、私は最初の0を取り除くことができますどのような方法があるかどうか、私は疑問に思って

0 0.2673 0.5345 0.8018 0.4558 0.5698 0.6838 0.5026 0.5744 0.6462 

のですか?

おかげで、 バウィヤ

答えて

1

これを試してみてください:ここで

vector_b=[]; 
normVector_b=[]; 
... 
1

私は厳密に言えば、MATLABは行列のためにそれを必要としないため、問題は、事前に割り当ててあるかわかりません。最初にゼロであるvector_b=[vector_b,b];には、vector_bが入ります。同じことが、とにかくnormVector_b

のために行く、これは動作するはずです:

% test matrix 
test = [1 2 3 4; 5 6 7 8 ; 9 10 11 12]; 

% reserve space for result 
res = zeros(size(test)); 

% loop over rows 
for i = 1:1:size(test, 1) 
    res(i, :) = test(i, :)./sqrt(sum(test(i, :).^2)); 
end 
+0

は、この情報をどうもありがとうございましたしかし、私がresのために割り当てる必要があるサイズがわからない場合は、どうすれば初期化できますか?デフォルト値? – bhavs

+0

@Maurits - 'sqrt(...)。^ 2'ではなく' norm(test) 'を使うことができます。 –

+1

@Bhavya - 'res'は' test'と同じサイズです - あなたが 'test'を知っているなら' size(res) 'を知っています。 'test'が' res'のときに定義されていなければ、空の行列に初期化するだけです。 –

0

はベクトル化ソリューションです。

%# some random matrix 
a = random(10,4); 

%# b(i,:) = a(i,:) ./ norm(a(i,:)) 
b = bsxfun(@rdivide, a, sqrt(sum(a.^2,2)))