How can I programmatically access information about a 'Graph` object in Mathematica 8?

半腔热情 提交于 2019-12-23 08:58:02

问题


I'm trying to access information within a Graph object in Mathematica 8. For some reason, the Part command does not seem to work.

myGraph is the object I want to gain access to.

The first line below displays myGraph. The others serve to inspect it.

myGraph

myGraph // FullForm  
myGraph // InputForm  
myGraph // OutputForm    
myGraph[[1]]
myGraph[[2]]  

Why doesn't myGraph[[1]] return List[1,3,4,2,5] ? [I checked to level 2 just in case Graph were wrapped by some invisible wrapper. Level[myGraph,1], simply returns {}. And FullForm[myGraph][[1]] returns a picture of the graph itself.

I must be overlooking something obvious.


Edit

Here's the code I used to produce the graph. Most of it is irrelevant to the issue at hand. But at least you'll be working with the same code I am using.

ClearAll[edges, compatibleQ, adjacentCourses, g];
edges[w_, b_] := 
 Most /@ Accumulate /@ 
   Flatten[Permutations[#] & /@ IntegerPartitions[w, All, b], 1]

compatibleQ[j_, k_, edg_] := 
 If[Intersection[edg[[j]], edg[[k]]] == {}, {j, k}, False]

adjacentCourses[edg_] := 
 Module[{len = Length[edg]},
  Cases[Flatten[Table[compatibleQ[j, k, edg], {j, len}, {k, j, len}], 
    1], {v_, w_} :>  v \[UndirectedEdge] w]]

myGraph =  Graph[adjacentCourses[edges[9, {2, 3}]], VertexLabels -> "Name", 
ImagePadding -> 10]

回答1:


Despite appearances, the graph objects introduced in Mathematica 8 are not "normal" symbolic expressions. The following SO question discusses this and other such problems in detail, including ways to extract parts of the graph definition:

new Graph in Mathematica 8.0




回答2:


This might be useful to you, to answer the question
"How can I programmatically access information about a 'Graph` object in Mathematica 8?"
There seems to be a number of new functions for getting bits of information about graphs as listed here http://reference.wolfram.com/mathematica/guide/GraphRepresentation.html.
In your example you seem to want the list of vertices of the graph in the correct order. The function VertixList seems to do this.
Here is a screenshot from Properties & Relations section in doc:




回答3:


Turns out that there were some straightforward answers to my question.

The documentation for Graph contains several ways of retrieving information from a Graph object. (Shame on me for not checking.) The most useful commands, in my view, are:

VertexList[]
VertexCount[]
EdgeList[]
EdgeCount[]
EdgeRules[] 
VertexIndex[]
EdgeIndex[]
PropertyValue[]

We need to get information OUT of the graph object typically after we've manipulated it. I can easily find what information went into a Graph I build but if a derivative Graph is output, e.g. from NeighborhoodGraph, I won't know its properties without probing.

Thanks to @dbJohn for the link to the Wolfram documentation.

Special thanks to @WReach for the link to his comments in a prior SO discussion about the Graph object.



来源:https://stackoverflow.com/questions/6315899/how-can-i-programmatically-access-information-about-a-graph-object-in-mathemat

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!