Построение Centroid @ каждой итерации - PullRequest
1 голос
/ 10 сентября 2011

У меня есть сценарий, в котором я генерирую матрицу C на каждой итерации. Размер матрицы C равен 2 x n. Каждый столбец в матрице C является двумерным центроидом, и у нас есть n центроид в матрице C .

Поскольку матрица C обновляется при каждой итерации, центроиды обновляются. Я хотел бы построить движение центроида 1 (столбец 1). График должен указывать мне движение центроида 1 от предыдущей итерации к текущей итерации, рисуя стрелку между точками.

Я пытался использовать функцию разброса в Matlab.

Ответы [ 2 ]

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

Рассмотрим следующий пример:

%# matrix of centroids
n = 5;
C = rand(2,n);

%# set up graphic objects
hScatter = gscatter(C(1,:), C(2,:), 1:n, [], [], 30); hold on
hQuiver = quiver(nan,nan,nan,nan);
set(hQuiver, 'AutoScale','off', 'Color','k')
axis([-10 10 -10 10])
drawnow, pause(1)

%# update and show C each iteration
for i=1:10
    %# update centroids
    oldC = C;
    C = C + randn(size(C));

    %# update centroids to new locations
    set(hScatter, {'XData'},num2cell(C(1,:))', {'YData'},num2cell(C(2,:))')

    %# plot arrow showing movement from old to new locations
    set(hQuiver, 'XData',oldC(1,:), 'YData',oldC(2,:), ...
        'UData',C(1,:)-oldC(1,:), 'VData',C(2,:)-oldC(2,:))

    %# show iteration number
    title( sprintf('Iteration %d',i) )

    %# refresh plot
    drawnow, pause(1)
end

enter image description here

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

Я думаю, вы должны взглянуть на функцию стрелки и использовать что-то вроде plot (); держитесь;

plot();hold on;
for i=1:iter
   arrow(C(old_iter),C(new_iter));
end;
hold off;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...