How to get the adjacency matrix from a cell array of strings?
조회 수: 2 (최근 30일)
이전 댓글 표시
Hi friends, I'm so sorry for asking multiple questions in a short time. i have this cell array of size(60*2), and i want to get the adjacency matrix from this cell array. i have tried sparse and accumarray but i get the following error :
accumarray(AA+1,1)
or
sparse(AA(:,1)+1,AA(:,2)+1,1)
Undefined function 'plus' for input arguments of type 'cell'.
Error in adj (line 5) sparse(AA(:,1)+1,AA(:,2)+1,1) Error in adj (line 5) accumarray(AA+1,1);
댓글 수: 0
채택된 답변
Guillaume
2017년 5월 25일
If you're using a very ancient matlab version such as R2012a, then mention it in your question.
This would work on R2012a:
[nodenames, ~, id] = unique(AA(:));
adj = accumarray(reshape(id, size(AA)), 1, [numel(nodenames), numel(nodenames)]);
rows and columns of adj are in order of nodenames.
추가 답변 (1개)
Walter Roberson
2017년 5월 25일
adj = adjacency(graph(AA(:,1),AA(:,2)));
댓글 수: 22
Walter Roberson
2017년 6월 1일
편집: Walter Roberson
2017년 6월 6일
Change the all() to any()
However! You are using directed graphs, and just because nothing links to a particular node does not mean that the node is isolated: it might itself have links to other nodes.
When you remove columns but not rows then you distort the meaning.
If you have a square matrix perhaps you should be using
mask = any(Adjacency_Matrix_mod1,1) | any(Adjacency_Matrix_mod1,2);
new_adj = Adjacency_Matrix_mod1(:,mask);
new_nodenames = nodenames1(mask);
This will not remove an all-zero column unless the corresponding row is also empty
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!