我是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)))