2016-02-11 4 views
0

У меня есть разреженная матрица связи 40000 * 40000, которая представляет мой график, и я использовал алгоритм нормализованного выреза для кластера этого графика. После кластеризации я получаю теги разделов для каждого узла в виде массива 40000 * 1.Как скопировать разреженную матрицу смежности с использованием MATLAB

Каков наилучший способ представить эту матрицу в виде матрицы кластера, где значение каждого (i, j) будет отображаться через соединения между кластерами. В принципе, если у меня есть 20 кластеров, мне понадобится матрица 20 * 20, где каждый элемент будет общим количеством соединений между кластерами.

ответ

2

Нахождение количества соединений из кластера aв кластере b должно быть достаточно просто:

cluster_connections(a,b) = nnz(connectivity_matrix(tags==a, tags==b)); 

Вот пример, используя полную матрицу исключительно для удобства чтения. Редкая матрица будет вести себя одинаково.

>> connectivity_matrix = randi([0 1],10) 
connectivity_matrix = 

    1 1 0 0 0 1 1 0 1 1 
    0 0 1 0 1 1 1 1 0 1 
    0 1 0 1 1 1 0 0 0 1 
    0 1 0 0 1 1 1 1 1 1 
    1 1 0 0 0 1 1 0 0 1 
    1 0 0 0 0 1 0 1 1 1 
    1 1 0 1 0 0 0 1 0 1 
    0 0 1 0 1 0 0 1 0 1 
    1 0 0 0 0 1 0 1 1 1 
    1 1 0 0 1 0 0 0 0 1 

>> tags = [1 2 3 2 3 1 2 3 3 1] 
tags = 

    1 2 3 2 3 1 2 3 3 1 


>> connectivity_matrix(tags==2, tags==3) 
ans = 

    1 1 1 0 
    0 1 1 1 
    0 0 1 0 

>> cluster_connections = nnz(connectivity_matrix(tags==2, tags==3)) 
cluster_connections = 7 
Смежные вопросы