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