devo grandi matrici sparse adiacenza con circa nodi 1M, che sto elaborazione con MATLAB. Voglio convertire queste matrici negli elenchi di bordo della rete nel modo più efficiente possibile. Come matrice esempio adiacenza per illustrare questo:Modo efficiente di convertire matrici di adiacenza di grandi dimensioni in liste di bordi in MATLAB?
adj = 1 0 1 0 0 0 1 1 0 0 1 0 0 1 0 0
E l'uscita chiamo un elenco bordo rete qui è:
>> adj2edgeList_Alex(adj) ans = 0 0 0 2 1 2 1 3 2 2 3 1
Questo codice che devo farlo stalle per tempo.
function edge_list = adj2edgeList_Alex(graph) edge_num = length(logical(graph > 0)); edge_list = zeros(edge_num,2); row_ind = 1; for ii=1:size(graph,2) ind_temp = find(graph(ii,:)==1); if(isempty(ind_temp) == 0) ind_temp = ind_temp - 1; edges_iter = length(ind_temp); node_num = ii - 1; edge_list(row_ind:row_ind+edges_iter-1,:) = ... [(node_num)*ones(1,edges_iter);ind_temp]'; row_ind = row_ind + edges_iter; end end
C'è una modifica per accelerare? Un'altra funzione o toolbox che può funzionare meglio?
Hai profilato il tuo codice? Usa il profiler per vedere dove agisce lentamente. Ciò ti aiuterà a darti degli indizi. – John