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

试试这个:

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

我不确定预分配的问题是什么,因为严格来说,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

这是一个矢量化的解:

%# some random matrix
a = random(10,4);
%# b(i,:) = a(i,:) ./ norm(a(i,:))
b = bsxfun(@rdivide, a, sqrt(sum(a.^2,2)))

最新更新