matlab中的数组操作

时间:2011-09-15 15:30:20

标签: arrays 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用于某些值,否则我会得到预分配错误。 但是,如果我初始化它,结果中的第一个元素是

0    0.2673    0.5345    0.8018    0.4558    0.5698    0.6838    0.5026    0.5744    0.6462

我想知道我是否有办法摆脱前0?

谢谢, Bhavya

3 个答案:

答案 0 :(得分: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

也是如此

无论如何,这应该有效:

{{1}}

答案 1 :(得分:1)

试试这个:

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

答案 2 :(得分:0)

这是一个矢量化解决方案:

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

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