операция массива в Matlab - PullRequest
       3

операция массива в Matlab

0 голосов
/ 15 сентября 2011

Я новичок в 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?

Спасибо, Бхавья

Ответы [ 3 ]

1 голос
/ 15 сентября 2011

Попробуйте это:

vector_b=[];
normVector_b=[];
...
1 голос
/ 15 сентября 2011

Я не уверен, в чем проблема с предварительным размещением, потому что, строго говоря, 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 голосов
/ 17 сентября 2011

Вот векторизованное решение:

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

%# b(i,:) = a(i,:) ./ norm(a(i,:))
b = bsxfun(@rdivide, a, sqrt(sum(a.^2,2)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...