2016-11-23 17 views
0

У меня есть массив как это:Draw (и процесс) график, на расстояния между данными точками (MATLAB)

1003 1007 0.0140589588522423 
1059 1185 0.0336635172202602 
1003 1093 0.0403056531253910 
1003 1111 0.0417787840566580 
1059 1127 0.0437157438475326 
1082 1092 0.0532154519263457 
1076 1185 0.0584688899071887 
1003 1129 0.0585907987209575 
1003 1045 0.0626826958352425 
1003 1070 0.0660757861128676 
1003 1014 0.0662929607751338 

Первый столбец указывает одно имя, второй столбец точка два имени, и третий столбец является расстоянием между каждыми двумя точками в диапазоне [0, 1]. Если мы имеем более высокое значение в третьем столбце, мы имеем большее расстояние, и если мы имеем меньшее значение в третьем столбце, мы имеем меньшее расстояние между указанными точками. У меня эти данные более чем на 20 000 пунктов. Теперь я хочу, чтобы диаграмма (график) и дополнительная информация имели лучшее понимание расстояний или гипотетических положений точек. Например, я хочу, чтобы кластер объединился вблизи точек и снова кластер около кластеров в более крупный кластер. Как это сделать с помощью MATLAB? У меня эти данные для пар всех точек.

+0

[Это] (https://www.mathworks.com/help/matlab/graph-and-network-algorithms.html) было бы хорошим местом для начала. – beaker

+0

Пожалуйста, покажите, что вы закодировали до сих пор! –

+0

@LeonardoHermoso. Нет никакого кода. У меня есть только эта матрица для анализа. – user2991243

ответ

1

Одним из простых решений для точной конфигурации является использование cmdscale() (https://www.mathworks.com/help/stats/cmdscale.html), чтобы найти потенциальную конфигурацию с учетом ограничений расстояния.

Принимая во внимание вектор расстояний между точками, cmdscale() будет возвращать n*p матрицу n точек в p размеров, где p сведено к минимуму.

Вам необходимо будет реорганизовать свои данные в матрицу расстояний между точками n*n, но чтобы получить какое-либо достойное графическое представление этого типа данных, это должно было быть сделано в любом случае.

distance = [0.0 0.1 0.2; 
      0.1 0.0 0.3; 
      0.2 0.3 0.0]; 
Y = cmdscale(distance); 
plot(ones(3,1),Y,'o'); % In this case my solution is 1 dimensional 

output

В течение 20000 точек данных вы, безусловно, нуждаются в более высокой размерности порядка (надеюсь, ваши данные уже ограничены в 2D или 3D). Если это не ограничено 3 измерениями, необходимо будет уменьшить конфигурационную матрицу для Y (см. Справку https://www.mathworks.com/help/stats/cmdscale.html), и вы потеряете некоторую точность (но это верно для любого точного представления в масштабированных данных).

Если вы заинтересованы в более вероятностном представлении, я нашел гораздо больше успехов в сетевых механизмах, которые используют динамическую физику связи/гравитацию, чтобы объединять узлы на основе весов, но я не видел ничего такого динамического, встроенного в MATLAB.