Neighboring nodes in the networkTest if directed graph is connectedWhy is NeighborhoodGraph so slow?How to...
Brothers & sisters
Is "remove commented out code" correct English?
Could gravitational lensing be used to protect a spaceship from a laser?
Reserved de-dupe rules
Doing something right before you need it - expression for this?
Should I tell management that I intend to leave due to bad software development practices?
Withdrawals from HSA
What's the point of deactivating Num Lock on login screens?
Watching something be written to a file live with tail
AES: Why is it a good practice to use only the first 16bytes of a hash for encryption?
What's the difference between 'rename' and 'mv'?
What is going on with Captain Marvel's blood colour?
Is the Joker left-handed?
Etiquette around loan refinance - decision is going to cost first broker a lot of money
Forgetting the musical notes while performing in concert
Today is the Center
90's TV series where a boy goes to another dimension through portal near power lines
What mechanic is there to disable a threat instead of killing it?
Why is the 'in' operator throwing an error with a string literal instead of logging false?
What is the intuition behind short exact sequences of groups; in particular, what is the intuition behind group extensions?
How can I make my BBEG immortal short of making them a Lich or Vampire?
Twin primes whose sum is a cube
Python: return float 1.0 as int 1 but float 1.5 as float 1.5
Can I use a neutral wire from another outlet to repair a broken neutral?
Neighboring nodes in the network
Test if directed graph is connectedWhy is NeighborhoodGraph so slow?How to add new nodes to an existing graph with fixed (coordinates) nodes?How do I upload a graph as an adjacency list and find the betweenness centrality?Arranging “ranked” nodes of a graph symmetricallyVertexLabels with Graph PropertiesNetwork with Radial Gradient Fill NodesHow to format vertices and control placement in a directed graphHow to label a large number of vertices using a list of namesColor the nodes according to certain valuesHighlight all paths in a graph below some threshold lengthSandbox algorithm for multifractal analysis of complex networks
$begingroup$
Consider the graph:
graph = {1 <-> 2, 1 <-> 4, 1 <-> 5, 1 <-> 8, 1 <-> 10, 1 <-> 26, 1 <-> 37, 1 <-> 42, 1 <-> 62, 1 <-> 86, 1 <-> 93, 1 <-> 100, 2 <-> 3, 2 <-> 7, 2 <-> 9, 2 <-> 12, 2 <-> 14, 2 <-> 17, 2 <-> 18, 2 <-> 25, 2 <-> 36, 2 <-> 41, 2 <-> 46, 2 <-> 50, 2 <-> 55, 2 <-> 72, 2 <-> 75, 3 <-> 6, 3 <-> 28, 3 <-> 34, 3 <-> 63, 4 <-> 13, 4 <-> 21, 5 <-> 20, 5 <-> 35, 5 <-> 40, 5 <-> 45, 5 <-> 48, 5 <-> 74, 6 <-> 31, 6 <-> 70, 9 <-> 11, 9 <-> 54, 9 <-> 67, 11 <-> 16, 11 <-> 24, 11 <-> 58, 11 <-> 60, 11 <-> 61, 11 <-> 65, 11 <-> 69, 12 <-> 27, 13 <-> 15, 13 <-> 33, 13 <-> 76, 14 <-> 30, 15 <-> 19, 15 <-> 96, 15 <-> 98, 16 <-> 57, 16 <-> 90, 19 <-> 22, 19 <-> 23, 19 <-> 39, 19 <-> 80, 19 <-> 83, 21 <-> 38, 22 <-> 59, 22 <-> 82, 25 <-> 29, 25 <-> 56, 25 <-> 94, 26 <-> 32, 26 <-> 43, 26 <-> 71, 27 <-> 47, 30 <-> 77, 30 <-> 78, 33 <-> 79, 33 <-> 97, 39 <-> 49, 39 <-> 51, 40 <-> 44, 40 <-> 73, 42 <-> 68, 48 <-> 52, 48 <-> 81, 50 <-> 53, 50 <-> 64, 50 <-> 89, 56 <-> 66, 56 <-> 92, 59 <-> 91, 62 <-> 88, 67 <-> 87, 74 <-> 95, 82 <-> 84, 82 <-> 85, 82 <-> 99};
net = Graph[graph, VertexShapeFunction -> "Name"]
Let's choose any node 'g' in the graph:
g=19;
Let 'r' denote the distance (counted in the number of nodes) from the node 'g':
d = GraphDiameter[net]
r = Range[1, d]
How to count all neighboring nodes within radius 'r' from the node 'g' ?
For example for node g=19 we have 6 nodes for r=1 (nodes: 80,83,22,39,23,15). For r=2 we have 7 nodes: 59,82,49,51,98,96,13.
graphs-and-networks
$endgroup$
add a comment |
$begingroup$
Consider the graph:
graph = {1 <-> 2, 1 <-> 4, 1 <-> 5, 1 <-> 8, 1 <-> 10, 1 <-> 26, 1 <-> 37, 1 <-> 42, 1 <-> 62, 1 <-> 86, 1 <-> 93, 1 <-> 100, 2 <-> 3, 2 <-> 7, 2 <-> 9, 2 <-> 12, 2 <-> 14, 2 <-> 17, 2 <-> 18, 2 <-> 25, 2 <-> 36, 2 <-> 41, 2 <-> 46, 2 <-> 50, 2 <-> 55, 2 <-> 72, 2 <-> 75, 3 <-> 6, 3 <-> 28, 3 <-> 34, 3 <-> 63, 4 <-> 13, 4 <-> 21, 5 <-> 20, 5 <-> 35, 5 <-> 40, 5 <-> 45, 5 <-> 48, 5 <-> 74, 6 <-> 31, 6 <-> 70, 9 <-> 11, 9 <-> 54, 9 <-> 67, 11 <-> 16, 11 <-> 24, 11 <-> 58, 11 <-> 60, 11 <-> 61, 11 <-> 65, 11 <-> 69, 12 <-> 27, 13 <-> 15, 13 <-> 33, 13 <-> 76, 14 <-> 30, 15 <-> 19, 15 <-> 96, 15 <-> 98, 16 <-> 57, 16 <-> 90, 19 <-> 22, 19 <-> 23, 19 <-> 39, 19 <-> 80, 19 <-> 83, 21 <-> 38, 22 <-> 59, 22 <-> 82, 25 <-> 29, 25 <-> 56, 25 <-> 94, 26 <-> 32, 26 <-> 43, 26 <-> 71, 27 <-> 47, 30 <-> 77, 30 <-> 78, 33 <-> 79, 33 <-> 97, 39 <-> 49, 39 <-> 51, 40 <-> 44, 40 <-> 73, 42 <-> 68, 48 <-> 52, 48 <-> 81, 50 <-> 53, 50 <-> 64, 50 <-> 89, 56 <-> 66, 56 <-> 92, 59 <-> 91, 62 <-> 88, 67 <-> 87, 74 <-> 95, 82 <-> 84, 82 <-> 85, 82 <-> 99};
net = Graph[graph, VertexShapeFunction -> "Name"]
Let's choose any node 'g' in the graph:
g=19;
Let 'r' denote the distance (counted in the number of nodes) from the node 'g':
d = GraphDiameter[net]
r = Range[1, d]
How to count all neighboring nodes within radius 'r' from the node 'g' ?
For example for node g=19 we have 6 nodes for r=1 (nodes: 80,83,22,39,23,15). For r=2 we have 7 nodes: 59,82,49,51,98,96,13.
graphs-and-networks
$endgroup$
add a comment |
$begingroup$
Consider the graph:
graph = {1 <-> 2, 1 <-> 4, 1 <-> 5, 1 <-> 8, 1 <-> 10, 1 <-> 26, 1 <-> 37, 1 <-> 42, 1 <-> 62, 1 <-> 86, 1 <-> 93, 1 <-> 100, 2 <-> 3, 2 <-> 7, 2 <-> 9, 2 <-> 12, 2 <-> 14, 2 <-> 17, 2 <-> 18, 2 <-> 25, 2 <-> 36, 2 <-> 41, 2 <-> 46, 2 <-> 50, 2 <-> 55, 2 <-> 72, 2 <-> 75, 3 <-> 6, 3 <-> 28, 3 <-> 34, 3 <-> 63, 4 <-> 13, 4 <-> 21, 5 <-> 20, 5 <-> 35, 5 <-> 40, 5 <-> 45, 5 <-> 48, 5 <-> 74, 6 <-> 31, 6 <-> 70, 9 <-> 11, 9 <-> 54, 9 <-> 67, 11 <-> 16, 11 <-> 24, 11 <-> 58, 11 <-> 60, 11 <-> 61, 11 <-> 65, 11 <-> 69, 12 <-> 27, 13 <-> 15, 13 <-> 33, 13 <-> 76, 14 <-> 30, 15 <-> 19, 15 <-> 96, 15 <-> 98, 16 <-> 57, 16 <-> 90, 19 <-> 22, 19 <-> 23, 19 <-> 39, 19 <-> 80, 19 <-> 83, 21 <-> 38, 22 <-> 59, 22 <-> 82, 25 <-> 29, 25 <-> 56, 25 <-> 94, 26 <-> 32, 26 <-> 43, 26 <-> 71, 27 <-> 47, 30 <-> 77, 30 <-> 78, 33 <-> 79, 33 <-> 97, 39 <-> 49, 39 <-> 51, 40 <-> 44, 40 <-> 73, 42 <-> 68, 48 <-> 52, 48 <-> 81, 50 <-> 53, 50 <-> 64, 50 <-> 89, 56 <-> 66, 56 <-> 92, 59 <-> 91, 62 <-> 88, 67 <-> 87, 74 <-> 95, 82 <-> 84, 82 <-> 85, 82 <-> 99};
net = Graph[graph, VertexShapeFunction -> "Name"]
Let's choose any node 'g' in the graph:
g=19;
Let 'r' denote the distance (counted in the number of nodes) from the node 'g':
d = GraphDiameter[net]
r = Range[1, d]
How to count all neighboring nodes within radius 'r' from the node 'g' ?
For example for node g=19 we have 6 nodes for r=1 (nodes: 80,83,22,39,23,15). For r=2 we have 7 nodes: 59,82,49,51,98,96,13.
graphs-and-networks
$endgroup$
Consider the graph:
graph = {1 <-> 2, 1 <-> 4, 1 <-> 5, 1 <-> 8, 1 <-> 10, 1 <-> 26, 1 <-> 37, 1 <-> 42, 1 <-> 62, 1 <-> 86, 1 <-> 93, 1 <-> 100, 2 <-> 3, 2 <-> 7, 2 <-> 9, 2 <-> 12, 2 <-> 14, 2 <-> 17, 2 <-> 18, 2 <-> 25, 2 <-> 36, 2 <-> 41, 2 <-> 46, 2 <-> 50, 2 <-> 55, 2 <-> 72, 2 <-> 75, 3 <-> 6, 3 <-> 28, 3 <-> 34, 3 <-> 63, 4 <-> 13, 4 <-> 21, 5 <-> 20, 5 <-> 35, 5 <-> 40, 5 <-> 45, 5 <-> 48, 5 <-> 74, 6 <-> 31, 6 <-> 70, 9 <-> 11, 9 <-> 54, 9 <-> 67, 11 <-> 16, 11 <-> 24, 11 <-> 58, 11 <-> 60, 11 <-> 61, 11 <-> 65, 11 <-> 69, 12 <-> 27, 13 <-> 15, 13 <-> 33, 13 <-> 76, 14 <-> 30, 15 <-> 19, 15 <-> 96, 15 <-> 98, 16 <-> 57, 16 <-> 90, 19 <-> 22, 19 <-> 23, 19 <-> 39, 19 <-> 80, 19 <-> 83, 21 <-> 38, 22 <-> 59, 22 <-> 82, 25 <-> 29, 25 <-> 56, 25 <-> 94, 26 <-> 32, 26 <-> 43, 26 <-> 71, 27 <-> 47, 30 <-> 77, 30 <-> 78, 33 <-> 79, 33 <-> 97, 39 <-> 49, 39 <-> 51, 40 <-> 44, 40 <-> 73, 42 <-> 68, 48 <-> 52, 48 <-> 81, 50 <-> 53, 50 <-> 64, 50 <-> 89, 56 <-> 66, 56 <-> 92, 59 <-> 91, 62 <-> 88, 67 <-> 87, 74 <-> 95, 82 <-> 84, 82 <-> 85, 82 <-> 99};
net = Graph[graph, VertexShapeFunction -> "Name"]
Let's choose any node 'g' in the graph:
g=19;
Let 'r' denote the distance (counted in the number of nodes) from the node 'g':
d = GraphDiameter[net]
r = Range[1, d]
How to count all neighboring nodes within radius 'r' from the node 'g' ?
For example for node g=19 we have 6 nodes for r=1 (nodes: 80,83,22,39,23,15). For r=2 we have 7 nodes: 59,82,49,51,98,96,13.
graphs-and-networks
graphs-and-networks
edited 14 hours ago
J. M. is away♦
98.9k10311467
98.9k10311467
asked 14 hours ago
ralphralph
1707
1707
add a comment |
add a comment |
5 Answers
5
active
oldest
votes
$begingroup$
I will choose a bit better GraphLayout for a tree:
net = Graph[graph, VertexLabels -> "Name", GraphLayout -> "RadialEmbedding"];
I suggest don't just count directly - get an object - a subgraph - of your query, so you can then run various computations on it and don't need count all over again based on different criteria w/ a different code.
nei[v_, d_] := NeighborhoodGraph[net, v, d]
Take distance 1:
nei[19, 1]

and see it is right:
HighlightGraph[net, nei[19, 1]]

Now you can compute whatever you need:
VertexList[nei[19, 1]]
Length[%] - 1
{19, 15, 22, 23, 39, 80, 83}
6
For the distance 2:
VertexList[nei[19, 1]]
VertexList[nei[19, 2]]
Complement[%, %%]
Length[%]
{19, 15, 22, 23, 39, 80, 83}
{19, 13, 15, 22, 23, 39, 49, 51, 59, 80, 82, 83, 96, 98}
{13, 49, 51, 59, 82, 96, 98}
7
Timings for large graphs
net = RandomGraph[BarabasiAlbertGraphDistribution[20000, 1]];
nei[v_, d_] := NeighborhoodGraph[net, v, d]
dist15:=Length[Complement[VertexList[nei[#,15]],VertexList[nei[#,14]]]&@RandomInteger[1000]]
Table[AbsoluteTiming[dist15;][[1]], 5]
{0.097359, 0.094737, 0.092589, 0.08872, 0.087478}
$endgroup$
$begingroup$
Thank you. The code gives correct results but is memory-consuming for large networks (around 200,000 nodes: net = RandomGraph [BarabasiAlbertGraphDistribution [20,000, 1] and d = {1,2,3,4, ..., 15}).
$endgroup$
– ralph
10 hours ago
$begingroup$
@ralph is 0.1 seconds is slow? What timings do you need? No criteria for timings is mentioned in your original post.
$endgroup$
– Vitaliy Kaurov
10 hours ago
$begingroup$
Please forgive me. I meant about 200,000 no 20,000 nodes.
$endgroup$
– ralph
10 hours ago
$begingroup$
@Szabolcs i was just answering question without performance consideration as it was not asked in the OP, which had a tiny graph. I added benchmark after he made a comment, and then he changed his comment again.
$endgroup$
– Vitaliy Kaurov
9 hours ago
$begingroup$
@VitaliyKaurov Sorry about the comments, I was wrong: this was actually fixed in 12.0. That is why I deleted them.
$endgroup$
– Szabolcs
7 hours ago
|
show 2 more comments
$begingroup$
You could build it using BreadthFirstScan:
net = RandomGraph[BarabasiAlbertGraphDistribution[200000, 1]];
distance =
GroupBy[Reap[
BreadthFirstScan[net,
19, {"DiscoverVertex" -> (Sow[#3 -> #1] &)}]][[2, 1]],
First -> Last, Association[{"length" -> Length[#], "set" -> #}] &];
Get length:
distance[3, "length"]
1194
distance[[All, "length"]]
<|0 -> 1, 1 -> 214, 2 -> 1194, 3 -> 3058, 4 -> 5826, 5 -> 10069, 6
-> 15110, 7 -> 19992, 8 -> 23821, 9 -> 24910, 10 -> 24767, 11 -> 21459, 12 -> 17869, 13 -> 13525, 14 -> 9119, 15 -> 5146, 16 -> 2406,
17 -> 1025, 18 -> 337, 19 -> 106, 20 -> 34, 21 -> 11, 22 -> 1|>
and set
distance[21, "set"]
{182224, 145742, 171910, 124658, 125540, 128520, 196392, 166986,
159530, 196846, 144772}
$endgroup$
1
$begingroup$
Amazingly fast, halmir! Any idea why this solution is so much faster thanGraphDistance, which I would have thought works byBreadthFirstScaninternally?
$endgroup$
– Roman
7 hours ago
1
$begingroup$
@Roman I had the conviction thatGraphDistancecompute the entireGraphDistanceMatrixeven if you gave it only one vertex. I do not remember what led me to this conclusion though. I do remember that I put a lot of effort into this functionality area in IGraph/M as I could not use M's built-ins for large graphs.
$endgroup$
– Szabolcs
6 hours ago
$begingroup$
@Roman A qucik test tells me that on a tree (which is being benchmarked here) the complexity ofGraphDistanceis quadratic in the graph size even when given just one vertex. That should not be so.
$endgroup$
– Szabolcs
6 hours ago
$begingroup$
@halmir Can you tell us whether this is a bug and if it is fixable? The quadratic complexity looks like a bug.
$endgroup$
– Szabolcs
6 hours ago
$begingroup$
@Roman I strongly suspect that I may have reported this issue to Wolfram in the past. See e.g. this post I wrote 3 years ago, where I mention it: mathematica.stackexchange.com/a/109408/12
$endgroup$
– Szabolcs
6 hours ago
|
show 2 more comments
$begingroup$
To count how many nodes there are at every distance (unsorted Association): use this if you want to Lookup a particular distance:
Counts@GraphDistance[net, g]
<|4 -> 4, 5 -> 12, 3 -> 7, 6 -> 26, 7 -> 20, 2 -> 7, 8 -> 15, 1 -> 6, 0 -> 1, 9 -> 2|>
Look them all up in order:
BinCounts[GraphDistance[net, g], {0, d, 1}]
{1, 6, 7, 7, 4, 12, 26, 20, 15, 2, 0, 0}
$endgroup$
$begingroup$
Thank you. The code gives correct results but is memory-consuming for large networks (around 200,000 nodes: net = RandomGraph [BarabasiAlbertGraphDistribution [20,000, 1] and d = {1,2,3,4, ..., 15})
$endgroup$
– ralph
10 hours ago
$begingroup$
Yes if you want only short distances then @szabolcs has better tools available. ThisGraphDistancesolution is only good if you want the distances to all nodes in the graph.
$endgroup$
– Roman
9 hours ago
add a comment |
$begingroup$
How to count all neighboring nodes within radius 'r' from the node 'g' ?
Use IGraph/M.
IGNeighborhoodSize does precisely this and is probably your fastest bet, but I do not have time to benchmark it against other solutions right now.
If you want to do it for multiple distances in one go, use IGDistanceCounts,
IGDistanceCounts[graph, {vertex}]
This gives you the counts of other vertices found at all (unweighted) distances. You can then simply Accumulate that list to get the result for all r at the same time.
For weighted distances, use IGDistanceHistogram.
$endgroup$
$begingroup$
Thanks. And how to count the same as the 'IGDistanceCounts[graph, {vertex}]' formula but for weighted networks?
$endgroup$
– ralph
8 hours ago
$begingroup$
@ralph As I said above, useIGDistanceHistogram
$endgroup$
– Szabolcs
7 hours ago
add a comment |
$begingroup$
For weighted network:
g1 = {4798 <-> 2641, 4798 <-> 2310, 4798 <-> 4721, 2310 <-> 1942,2310 <-> 961, 4721 <-> 4507, 4721 <-> 4779, 4779 <-> 4336, 4779 <-> 3238, 4336 <-> 3277, 4336 <-> 3514, 3277 <-> 2923, 2923 <-> 2772, 2923 <-> 2401, 2772 <-> 2, 2772 <-> 2771, 3514 <-> 3042, 3514 <-> 2739, 3042 <-> 3007, 3042 <-> 1655, 2739 <-> 2277, 2739 <-> 1895, 2 <-> 5, 2 <-> 3, 3277 <-> 100, 5 <-> 6, 5 <-> 7, 5 <-> 8, 5 <-> 9};
w1 = {10, 20, 20, 4, 35, 3, 4, 6, 17, 7, 13, 2, 2, 7, 2, 1, 3, 5, 3, 6,4, 6, 2, 1, 1, 1, 1, 1, 1};
w2=Table[1, 29];
net1 = Graph[g1, EdgeWeight -> w1, EdgeLabels -> "EdgeWeight", VertexShapeFunction -> "Name"]
net2 = Graph[g1, EdgeWeight -> w2, EdgeLabels -> "EdgeWeight", VertexShapeFunction -> "Name"]
s = RandomSample[VertexList[net1], 15];
Mr = Table[IGDistanceCounts[net1, {s[[i]]}], {i, 1, Length[s]}] (*for non weighted*)
Mr2 = IGDistanceHistogram[net1, 9] (*for weighted graph ?*)
Mr3 = IGDistanceHistogram[net2, 9] (*for non weighted graph ? Mr3==Mr *)
$endgroup$
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
});
});
}, "mathjax-editing");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "387"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f194581%2fneighboring-nodes-in-the-network%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
5 Answers
5
active
oldest
votes
5 Answers
5
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
I will choose a bit better GraphLayout for a tree:
net = Graph[graph, VertexLabels -> "Name", GraphLayout -> "RadialEmbedding"];
I suggest don't just count directly - get an object - a subgraph - of your query, so you can then run various computations on it and don't need count all over again based on different criteria w/ a different code.
nei[v_, d_] := NeighborhoodGraph[net, v, d]
Take distance 1:
nei[19, 1]

and see it is right:
HighlightGraph[net, nei[19, 1]]

Now you can compute whatever you need:
VertexList[nei[19, 1]]
Length[%] - 1
{19, 15, 22, 23, 39, 80, 83}
6
For the distance 2:
VertexList[nei[19, 1]]
VertexList[nei[19, 2]]
Complement[%, %%]
Length[%]
{19, 15, 22, 23, 39, 80, 83}
{19, 13, 15, 22, 23, 39, 49, 51, 59, 80, 82, 83, 96, 98}
{13, 49, 51, 59, 82, 96, 98}
7
Timings for large graphs
net = RandomGraph[BarabasiAlbertGraphDistribution[20000, 1]];
nei[v_, d_] := NeighborhoodGraph[net, v, d]
dist15:=Length[Complement[VertexList[nei[#,15]],VertexList[nei[#,14]]]&@RandomInteger[1000]]
Table[AbsoluteTiming[dist15;][[1]], 5]
{0.097359, 0.094737, 0.092589, 0.08872, 0.087478}
$endgroup$
$begingroup$
Thank you. The code gives correct results but is memory-consuming for large networks (around 200,000 nodes: net = RandomGraph [BarabasiAlbertGraphDistribution [20,000, 1] and d = {1,2,3,4, ..., 15}).
$endgroup$
– ralph
10 hours ago
$begingroup$
@ralph is 0.1 seconds is slow? What timings do you need? No criteria for timings is mentioned in your original post.
$endgroup$
– Vitaliy Kaurov
10 hours ago
$begingroup$
Please forgive me. I meant about 200,000 no 20,000 nodes.
$endgroup$
– ralph
10 hours ago
$begingroup$
@Szabolcs i was just answering question without performance consideration as it was not asked in the OP, which had a tiny graph. I added benchmark after he made a comment, and then he changed his comment again.
$endgroup$
– Vitaliy Kaurov
9 hours ago
$begingroup$
@VitaliyKaurov Sorry about the comments, I was wrong: this was actually fixed in 12.0. That is why I deleted them.
$endgroup$
– Szabolcs
7 hours ago
|
show 2 more comments
$begingroup$
I will choose a bit better GraphLayout for a tree:
net = Graph[graph, VertexLabels -> "Name", GraphLayout -> "RadialEmbedding"];
I suggest don't just count directly - get an object - a subgraph - of your query, so you can then run various computations on it and don't need count all over again based on different criteria w/ a different code.
nei[v_, d_] := NeighborhoodGraph[net, v, d]
Take distance 1:
nei[19, 1]

and see it is right:
HighlightGraph[net, nei[19, 1]]

Now you can compute whatever you need:
VertexList[nei[19, 1]]
Length[%] - 1
{19, 15, 22, 23, 39, 80, 83}
6
For the distance 2:
VertexList[nei[19, 1]]
VertexList[nei[19, 2]]
Complement[%, %%]
Length[%]
{19, 15, 22, 23, 39, 80, 83}
{19, 13, 15, 22, 23, 39, 49, 51, 59, 80, 82, 83, 96, 98}
{13, 49, 51, 59, 82, 96, 98}
7
Timings for large graphs
net = RandomGraph[BarabasiAlbertGraphDistribution[20000, 1]];
nei[v_, d_] := NeighborhoodGraph[net, v, d]
dist15:=Length[Complement[VertexList[nei[#,15]],VertexList[nei[#,14]]]&@RandomInteger[1000]]
Table[AbsoluteTiming[dist15;][[1]], 5]
{0.097359, 0.094737, 0.092589, 0.08872, 0.087478}
$endgroup$
$begingroup$
Thank you. The code gives correct results but is memory-consuming for large networks (around 200,000 nodes: net = RandomGraph [BarabasiAlbertGraphDistribution [20,000, 1] and d = {1,2,3,4, ..., 15}).
$endgroup$
– ralph
10 hours ago
$begingroup$
@ralph is 0.1 seconds is slow? What timings do you need? No criteria for timings is mentioned in your original post.
$endgroup$
– Vitaliy Kaurov
10 hours ago
$begingroup$
Please forgive me. I meant about 200,000 no 20,000 nodes.
$endgroup$
– ralph
10 hours ago
$begingroup$
@Szabolcs i was just answering question without performance consideration as it was not asked in the OP, which had a tiny graph. I added benchmark after he made a comment, and then he changed his comment again.
$endgroup$
– Vitaliy Kaurov
9 hours ago
$begingroup$
@VitaliyKaurov Sorry about the comments, I was wrong: this was actually fixed in 12.0. That is why I deleted them.
$endgroup$
– Szabolcs
7 hours ago
|
show 2 more comments
$begingroup$
I will choose a bit better GraphLayout for a tree:
net = Graph[graph, VertexLabels -> "Name", GraphLayout -> "RadialEmbedding"];
I suggest don't just count directly - get an object - a subgraph - of your query, so you can then run various computations on it and don't need count all over again based on different criteria w/ a different code.
nei[v_, d_] := NeighborhoodGraph[net, v, d]
Take distance 1:
nei[19, 1]

and see it is right:
HighlightGraph[net, nei[19, 1]]

Now you can compute whatever you need:
VertexList[nei[19, 1]]
Length[%] - 1
{19, 15, 22, 23, 39, 80, 83}
6
For the distance 2:
VertexList[nei[19, 1]]
VertexList[nei[19, 2]]
Complement[%, %%]
Length[%]
{19, 15, 22, 23, 39, 80, 83}
{19, 13, 15, 22, 23, 39, 49, 51, 59, 80, 82, 83, 96, 98}
{13, 49, 51, 59, 82, 96, 98}
7
Timings for large graphs
net = RandomGraph[BarabasiAlbertGraphDistribution[20000, 1]];
nei[v_, d_] := NeighborhoodGraph[net, v, d]
dist15:=Length[Complement[VertexList[nei[#,15]],VertexList[nei[#,14]]]&@RandomInteger[1000]]
Table[AbsoluteTiming[dist15;][[1]], 5]
{0.097359, 0.094737, 0.092589, 0.08872, 0.087478}
$endgroup$
I will choose a bit better GraphLayout for a tree:
net = Graph[graph, VertexLabels -> "Name", GraphLayout -> "RadialEmbedding"];
I suggest don't just count directly - get an object - a subgraph - of your query, so you can then run various computations on it and don't need count all over again based on different criteria w/ a different code.
nei[v_, d_] := NeighborhoodGraph[net, v, d]
Take distance 1:
nei[19, 1]

and see it is right:
HighlightGraph[net, nei[19, 1]]

Now you can compute whatever you need:
VertexList[nei[19, 1]]
Length[%] - 1
{19, 15, 22, 23, 39, 80, 83}
6
For the distance 2:
VertexList[nei[19, 1]]
VertexList[nei[19, 2]]
Complement[%, %%]
Length[%]
{19, 15, 22, 23, 39, 80, 83}
{19, 13, 15, 22, 23, 39, 49, 51, 59, 80, 82, 83, 96, 98}
{13, 49, 51, 59, 82, 96, 98}
7
Timings for large graphs
net = RandomGraph[BarabasiAlbertGraphDistribution[20000, 1]];
nei[v_, d_] := NeighborhoodGraph[net, v, d]
dist15:=Length[Complement[VertexList[nei[#,15]],VertexList[nei[#,14]]]&@RandomInteger[1000]]
Table[AbsoluteTiming[dist15;][[1]], 5]
{0.097359, 0.094737, 0.092589, 0.08872, 0.087478}
edited 10 hours ago
answered 14 hours ago
Vitaliy KaurovVitaliy Kaurov
57.6k6162282
57.6k6162282
$begingroup$
Thank you. The code gives correct results but is memory-consuming for large networks (around 200,000 nodes: net = RandomGraph [BarabasiAlbertGraphDistribution [20,000, 1] and d = {1,2,3,4, ..., 15}).
$endgroup$
– ralph
10 hours ago
$begingroup$
@ralph is 0.1 seconds is slow? What timings do you need? No criteria for timings is mentioned in your original post.
$endgroup$
– Vitaliy Kaurov
10 hours ago
$begingroup$
Please forgive me. I meant about 200,000 no 20,000 nodes.
$endgroup$
– ralph
10 hours ago
$begingroup$
@Szabolcs i was just answering question without performance consideration as it was not asked in the OP, which had a tiny graph. I added benchmark after he made a comment, and then he changed his comment again.
$endgroup$
– Vitaliy Kaurov
9 hours ago
$begingroup$
@VitaliyKaurov Sorry about the comments, I was wrong: this was actually fixed in 12.0. That is why I deleted them.
$endgroup$
– Szabolcs
7 hours ago
|
show 2 more comments
$begingroup$
Thank you. The code gives correct results but is memory-consuming for large networks (around 200,000 nodes: net = RandomGraph [BarabasiAlbertGraphDistribution [20,000, 1] and d = {1,2,3,4, ..., 15}).
$endgroup$
– ralph
10 hours ago
$begingroup$
@ralph is 0.1 seconds is slow? What timings do you need? No criteria for timings is mentioned in your original post.
$endgroup$
– Vitaliy Kaurov
10 hours ago
$begingroup$
Please forgive me. I meant about 200,000 no 20,000 nodes.
$endgroup$
– ralph
10 hours ago
$begingroup$
@Szabolcs i was just answering question without performance consideration as it was not asked in the OP, which had a tiny graph. I added benchmark after he made a comment, and then he changed his comment again.
$endgroup$
– Vitaliy Kaurov
9 hours ago
$begingroup$
@VitaliyKaurov Sorry about the comments, I was wrong: this was actually fixed in 12.0. That is why I deleted them.
$endgroup$
– Szabolcs
7 hours ago
$begingroup$
Thank you. The code gives correct results but is memory-consuming for large networks (around 200,000 nodes: net = RandomGraph [BarabasiAlbertGraphDistribution [20,000, 1] and d = {1,2,3,4, ..., 15}).
$endgroup$
– ralph
10 hours ago
$begingroup$
Thank you. The code gives correct results but is memory-consuming for large networks (around 200,000 nodes: net = RandomGraph [BarabasiAlbertGraphDistribution [20,000, 1] and d = {1,2,3,4, ..., 15}).
$endgroup$
– ralph
10 hours ago
$begingroup$
@ralph is 0.1 seconds is slow? What timings do you need? No criteria for timings is mentioned in your original post.
$endgroup$
– Vitaliy Kaurov
10 hours ago
$begingroup$
@ralph is 0.1 seconds is slow? What timings do you need? No criteria for timings is mentioned in your original post.
$endgroup$
– Vitaliy Kaurov
10 hours ago
$begingroup$
Please forgive me. I meant about 200,000 no 20,000 nodes.
$endgroup$
– ralph
10 hours ago
$begingroup$
Please forgive me. I meant about 200,000 no 20,000 nodes.
$endgroup$
– ralph
10 hours ago
$begingroup$
@Szabolcs i was just answering question without performance consideration as it was not asked in the OP, which had a tiny graph. I added benchmark after he made a comment, and then he changed his comment again.
$endgroup$
– Vitaliy Kaurov
9 hours ago
$begingroup$
@Szabolcs i was just answering question without performance consideration as it was not asked in the OP, which had a tiny graph. I added benchmark after he made a comment, and then he changed his comment again.
$endgroup$
– Vitaliy Kaurov
9 hours ago
$begingroup$
@VitaliyKaurov Sorry about the comments, I was wrong: this was actually fixed in 12.0. That is why I deleted them.
$endgroup$
– Szabolcs
7 hours ago
$begingroup$
@VitaliyKaurov Sorry about the comments, I was wrong: this was actually fixed in 12.0. That is why I deleted them.
$endgroup$
– Szabolcs
7 hours ago
|
show 2 more comments
$begingroup$
You could build it using BreadthFirstScan:
net = RandomGraph[BarabasiAlbertGraphDistribution[200000, 1]];
distance =
GroupBy[Reap[
BreadthFirstScan[net,
19, {"DiscoverVertex" -> (Sow[#3 -> #1] &)}]][[2, 1]],
First -> Last, Association[{"length" -> Length[#], "set" -> #}] &];
Get length:
distance[3, "length"]
1194
distance[[All, "length"]]
<|0 -> 1, 1 -> 214, 2 -> 1194, 3 -> 3058, 4 -> 5826, 5 -> 10069, 6
-> 15110, 7 -> 19992, 8 -> 23821, 9 -> 24910, 10 -> 24767, 11 -> 21459, 12 -> 17869, 13 -> 13525, 14 -> 9119, 15 -> 5146, 16 -> 2406,
17 -> 1025, 18 -> 337, 19 -> 106, 20 -> 34, 21 -> 11, 22 -> 1|>
and set
distance[21, "set"]
{182224, 145742, 171910, 124658, 125540, 128520, 196392, 166986,
159530, 196846, 144772}
$endgroup$
1
$begingroup$
Amazingly fast, halmir! Any idea why this solution is so much faster thanGraphDistance, which I would have thought works byBreadthFirstScaninternally?
$endgroup$
– Roman
7 hours ago
1
$begingroup$
@Roman I had the conviction thatGraphDistancecompute the entireGraphDistanceMatrixeven if you gave it only one vertex. I do not remember what led me to this conclusion though. I do remember that I put a lot of effort into this functionality area in IGraph/M as I could not use M's built-ins for large graphs.
$endgroup$
– Szabolcs
6 hours ago
$begingroup$
@Roman A qucik test tells me that on a tree (which is being benchmarked here) the complexity ofGraphDistanceis quadratic in the graph size even when given just one vertex. That should not be so.
$endgroup$
– Szabolcs
6 hours ago
$begingroup$
@halmir Can you tell us whether this is a bug and if it is fixable? The quadratic complexity looks like a bug.
$endgroup$
– Szabolcs
6 hours ago
$begingroup$
@Roman I strongly suspect that I may have reported this issue to Wolfram in the past. See e.g. this post I wrote 3 years ago, where I mention it: mathematica.stackexchange.com/a/109408/12
$endgroup$
– Szabolcs
6 hours ago
|
show 2 more comments
$begingroup$
You could build it using BreadthFirstScan:
net = RandomGraph[BarabasiAlbertGraphDistribution[200000, 1]];
distance =
GroupBy[Reap[
BreadthFirstScan[net,
19, {"DiscoverVertex" -> (Sow[#3 -> #1] &)}]][[2, 1]],
First -> Last, Association[{"length" -> Length[#], "set" -> #}] &];
Get length:
distance[3, "length"]
1194
distance[[All, "length"]]
<|0 -> 1, 1 -> 214, 2 -> 1194, 3 -> 3058, 4 -> 5826, 5 -> 10069, 6
-> 15110, 7 -> 19992, 8 -> 23821, 9 -> 24910, 10 -> 24767, 11 -> 21459, 12 -> 17869, 13 -> 13525, 14 -> 9119, 15 -> 5146, 16 -> 2406,
17 -> 1025, 18 -> 337, 19 -> 106, 20 -> 34, 21 -> 11, 22 -> 1|>
and set
distance[21, "set"]
{182224, 145742, 171910, 124658, 125540, 128520, 196392, 166986,
159530, 196846, 144772}
$endgroup$
1
$begingroup$
Amazingly fast, halmir! Any idea why this solution is so much faster thanGraphDistance, which I would have thought works byBreadthFirstScaninternally?
$endgroup$
– Roman
7 hours ago
1
$begingroup$
@Roman I had the conviction thatGraphDistancecompute the entireGraphDistanceMatrixeven if you gave it only one vertex. I do not remember what led me to this conclusion though. I do remember that I put a lot of effort into this functionality area in IGraph/M as I could not use M's built-ins for large graphs.
$endgroup$
– Szabolcs
6 hours ago
$begingroup$
@Roman A qucik test tells me that on a tree (which is being benchmarked here) the complexity ofGraphDistanceis quadratic in the graph size even when given just one vertex. That should not be so.
$endgroup$
– Szabolcs
6 hours ago
$begingroup$
@halmir Can you tell us whether this is a bug and if it is fixable? The quadratic complexity looks like a bug.
$endgroup$
– Szabolcs
6 hours ago
$begingroup$
@Roman I strongly suspect that I may have reported this issue to Wolfram in the past. See e.g. this post I wrote 3 years ago, where I mention it: mathematica.stackexchange.com/a/109408/12
$endgroup$
– Szabolcs
6 hours ago
|
show 2 more comments
$begingroup$
You could build it using BreadthFirstScan:
net = RandomGraph[BarabasiAlbertGraphDistribution[200000, 1]];
distance =
GroupBy[Reap[
BreadthFirstScan[net,
19, {"DiscoverVertex" -> (Sow[#3 -> #1] &)}]][[2, 1]],
First -> Last, Association[{"length" -> Length[#], "set" -> #}] &];
Get length:
distance[3, "length"]
1194
distance[[All, "length"]]
<|0 -> 1, 1 -> 214, 2 -> 1194, 3 -> 3058, 4 -> 5826, 5 -> 10069, 6
-> 15110, 7 -> 19992, 8 -> 23821, 9 -> 24910, 10 -> 24767, 11 -> 21459, 12 -> 17869, 13 -> 13525, 14 -> 9119, 15 -> 5146, 16 -> 2406,
17 -> 1025, 18 -> 337, 19 -> 106, 20 -> 34, 21 -> 11, 22 -> 1|>
and set
distance[21, "set"]
{182224, 145742, 171910, 124658, 125540, 128520, 196392, 166986,
159530, 196846, 144772}
$endgroup$
You could build it using BreadthFirstScan:
net = RandomGraph[BarabasiAlbertGraphDistribution[200000, 1]];
distance =
GroupBy[Reap[
BreadthFirstScan[net,
19, {"DiscoverVertex" -> (Sow[#3 -> #1] &)}]][[2, 1]],
First -> Last, Association[{"length" -> Length[#], "set" -> #}] &];
Get length:
distance[3, "length"]
1194
distance[[All, "length"]]
<|0 -> 1, 1 -> 214, 2 -> 1194, 3 -> 3058, 4 -> 5826, 5 -> 10069, 6
-> 15110, 7 -> 19992, 8 -> 23821, 9 -> 24910, 10 -> 24767, 11 -> 21459, 12 -> 17869, 13 -> 13525, 14 -> 9119, 15 -> 5146, 16 -> 2406,
17 -> 1025, 18 -> 337, 19 -> 106, 20 -> 34, 21 -> 11, 22 -> 1|>
and set
distance[21, "set"]
{182224, 145742, 171910, 124658, 125540, 128520, 196392, 166986,
159530, 196846, 144772}
answered 8 hours ago
halmirhalmir
10.6k2544
10.6k2544
1
$begingroup$
Amazingly fast, halmir! Any idea why this solution is so much faster thanGraphDistance, which I would have thought works byBreadthFirstScaninternally?
$endgroup$
– Roman
7 hours ago
1
$begingroup$
@Roman I had the conviction thatGraphDistancecompute the entireGraphDistanceMatrixeven if you gave it only one vertex. I do not remember what led me to this conclusion though. I do remember that I put a lot of effort into this functionality area in IGraph/M as I could not use M's built-ins for large graphs.
$endgroup$
– Szabolcs
6 hours ago
$begingroup$
@Roman A qucik test tells me that on a tree (which is being benchmarked here) the complexity ofGraphDistanceis quadratic in the graph size even when given just one vertex. That should not be so.
$endgroup$
– Szabolcs
6 hours ago
$begingroup$
@halmir Can you tell us whether this is a bug and if it is fixable? The quadratic complexity looks like a bug.
$endgroup$
– Szabolcs
6 hours ago
$begingroup$
@Roman I strongly suspect that I may have reported this issue to Wolfram in the past. See e.g. this post I wrote 3 years ago, where I mention it: mathematica.stackexchange.com/a/109408/12
$endgroup$
– Szabolcs
6 hours ago
|
show 2 more comments
1
$begingroup$
Amazingly fast, halmir! Any idea why this solution is so much faster thanGraphDistance, which I would have thought works byBreadthFirstScaninternally?
$endgroup$
– Roman
7 hours ago
1
$begingroup$
@Roman I had the conviction thatGraphDistancecompute the entireGraphDistanceMatrixeven if you gave it only one vertex. I do not remember what led me to this conclusion though. I do remember that I put a lot of effort into this functionality area in IGraph/M as I could not use M's built-ins for large graphs.
$endgroup$
– Szabolcs
6 hours ago
$begingroup$
@Roman A qucik test tells me that on a tree (which is being benchmarked here) the complexity ofGraphDistanceis quadratic in the graph size even when given just one vertex. That should not be so.
$endgroup$
– Szabolcs
6 hours ago
$begingroup$
@halmir Can you tell us whether this is a bug and if it is fixable? The quadratic complexity looks like a bug.
$endgroup$
– Szabolcs
6 hours ago
$begingroup$
@Roman I strongly suspect that I may have reported this issue to Wolfram in the past. See e.g. this post I wrote 3 years ago, where I mention it: mathematica.stackexchange.com/a/109408/12
$endgroup$
– Szabolcs
6 hours ago
1
1
$begingroup$
Amazingly fast, halmir! Any idea why this solution is so much faster than
GraphDistance, which I would have thought works by BreadthFirstScan internally?$endgroup$
– Roman
7 hours ago
$begingroup$
Amazingly fast, halmir! Any idea why this solution is so much faster than
GraphDistance, which I would have thought works by BreadthFirstScan internally?$endgroup$
– Roman
7 hours ago
1
1
$begingroup$
@Roman I had the conviction that
GraphDistance compute the entire GraphDistanceMatrix even if you gave it only one vertex. I do not remember what led me to this conclusion though. I do remember that I put a lot of effort into this functionality area in IGraph/M as I could not use M's built-ins for large graphs.$endgroup$
– Szabolcs
6 hours ago
$begingroup$
@Roman I had the conviction that
GraphDistance compute the entire GraphDistanceMatrix even if you gave it only one vertex. I do not remember what led me to this conclusion though. I do remember that I put a lot of effort into this functionality area in IGraph/M as I could not use M's built-ins for large graphs.$endgroup$
– Szabolcs
6 hours ago
$begingroup$
@Roman A qucik test tells me that on a tree (which is being benchmarked here) the complexity of
GraphDistance is quadratic in the graph size even when given just one vertex. That should not be so.$endgroup$
– Szabolcs
6 hours ago
$begingroup$
@Roman A qucik test tells me that on a tree (which is being benchmarked here) the complexity of
GraphDistance is quadratic in the graph size even when given just one vertex. That should not be so.$endgroup$
– Szabolcs
6 hours ago
$begingroup$
@halmir Can you tell us whether this is a bug and if it is fixable? The quadratic complexity looks like a bug.
$endgroup$
– Szabolcs
6 hours ago
$begingroup$
@halmir Can you tell us whether this is a bug and if it is fixable? The quadratic complexity looks like a bug.
$endgroup$
– Szabolcs
6 hours ago
$begingroup$
@Roman I strongly suspect that I may have reported this issue to Wolfram in the past. See e.g. this post I wrote 3 years ago, where I mention it: mathematica.stackexchange.com/a/109408/12
$endgroup$
– Szabolcs
6 hours ago
$begingroup$
@Roman I strongly suspect that I may have reported this issue to Wolfram in the past. See e.g. this post I wrote 3 years ago, where I mention it: mathematica.stackexchange.com/a/109408/12
$endgroup$
– Szabolcs
6 hours ago
|
show 2 more comments
$begingroup$
To count how many nodes there are at every distance (unsorted Association): use this if you want to Lookup a particular distance:
Counts@GraphDistance[net, g]
<|4 -> 4, 5 -> 12, 3 -> 7, 6 -> 26, 7 -> 20, 2 -> 7, 8 -> 15, 1 -> 6, 0 -> 1, 9 -> 2|>
Look them all up in order:
BinCounts[GraphDistance[net, g], {0, d, 1}]
{1, 6, 7, 7, 4, 12, 26, 20, 15, 2, 0, 0}
$endgroup$
$begingroup$
Thank you. The code gives correct results but is memory-consuming for large networks (around 200,000 nodes: net = RandomGraph [BarabasiAlbertGraphDistribution [20,000, 1] and d = {1,2,3,4, ..., 15})
$endgroup$
– ralph
10 hours ago
$begingroup$
Yes if you want only short distances then @szabolcs has better tools available. ThisGraphDistancesolution is only good if you want the distances to all nodes in the graph.
$endgroup$
– Roman
9 hours ago
add a comment |
$begingroup$
To count how many nodes there are at every distance (unsorted Association): use this if you want to Lookup a particular distance:
Counts@GraphDistance[net, g]
<|4 -> 4, 5 -> 12, 3 -> 7, 6 -> 26, 7 -> 20, 2 -> 7, 8 -> 15, 1 -> 6, 0 -> 1, 9 -> 2|>
Look them all up in order:
BinCounts[GraphDistance[net, g], {0, d, 1}]
{1, 6, 7, 7, 4, 12, 26, 20, 15, 2, 0, 0}
$endgroup$
$begingroup$
Thank you. The code gives correct results but is memory-consuming for large networks (around 200,000 nodes: net = RandomGraph [BarabasiAlbertGraphDistribution [20,000, 1] and d = {1,2,3,4, ..., 15})
$endgroup$
– ralph
10 hours ago
$begingroup$
Yes if you want only short distances then @szabolcs has better tools available. ThisGraphDistancesolution is only good if you want the distances to all nodes in the graph.
$endgroup$
– Roman
9 hours ago
add a comment |
$begingroup$
To count how many nodes there are at every distance (unsorted Association): use this if you want to Lookup a particular distance:
Counts@GraphDistance[net, g]
<|4 -> 4, 5 -> 12, 3 -> 7, 6 -> 26, 7 -> 20, 2 -> 7, 8 -> 15, 1 -> 6, 0 -> 1, 9 -> 2|>
Look them all up in order:
BinCounts[GraphDistance[net, g], {0, d, 1}]
{1, 6, 7, 7, 4, 12, 26, 20, 15, 2, 0, 0}
$endgroup$
To count how many nodes there are at every distance (unsorted Association): use this if you want to Lookup a particular distance:
Counts@GraphDistance[net, g]
<|4 -> 4, 5 -> 12, 3 -> 7, 6 -> 26, 7 -> 20, 2 -> 7, 8 -> 15, 1 -> 6, 0 -> 1, 9 -> 2|>
Look them all up in order:
BinCounts[GraphDistance[net, g], {0, d, 1}]
{1, 6, 7, 7, 4, 12, 26, 20, 15, 2, 0, 0}
edited 10 hours ago
answered 14 hours ago
RomanRoman
4,3151027
4,3151027
$begingroup$
Thank you. The code gives correct results but is memory-consuming for large networks (around 200,000 nodes: net = RandomGraph [BarabasiAlbertGraphDistribution [20,000, 1] and d = {1,2,3,4, ..., 15})
$endgroup$
– ralph
10 hours ago
$begingroup$
Yes if you want only short distances then @szabolcs has better tools available. ThisGraphDistancesolution is only good if you want the distances to all nodes in the graph.
$endgroup$
– Roman
9 hours ago
add a comment |
$begingroup$
Thank you. The code gives correct results but is memory-consuming for large networks (around 200,000 nodes: net = RandomGraph [BarabasiAlbertGraphDistribution [20,000, 1] and d = {1,2,3,4, ..., 15})
$endgroup$
– ralph
10 hours ago
$begingroup$
Yes if you want only short distances then @szabolcs has better tools available. ThisGraphDistancesolution is only good if you want the distances to all nodes in the graph.
$endgroup$
– Roman
9 hours ago
$begingroup$
Thank you. The code gives correct results but is memory-consuming for large networks (around 200,000 nodes: net = RandomGraph [BarabasiAlbertGraphDistribution [20,000, 1] and d = {1,2,3,4, ..., 15})
$endgroup$
– ralph
10 hours ago
$begingroup$
Thank you. The code gives correct results but is memory-consuming for large networks (around 200,000 nodes: net = RandomGraph [BarabasiAlbertGraphDistribution [20,000, 1] and d = {1,2,3,4, ..., 15})
$endgroup$
– ralph
10 hours ago
$begingroup$
Yes if you want only short distances then @szabolcs has better tools available. This
GraphDistance solution is only good if you want the distances to all nodes in the graph.$endgroup$
– Roman
9 hours ago
$begingroup$
Yes if you want only short distances then @szabolcs has better tools available. This
GraphDistance solution is only good if you want the distances to all nodes in the graph.$endgroup$
– Roman
9 hours ago
add a comment |
$begingroup$
How to count all neighboring nodes within radius 'r' from the node 'g' ?
Use IGraph/M.
IGNeighborhoodSize does precisely this and is probably your fastest bet, but I do not have time to benchmark it against other solutions right now.
If you want to do it for multiple distances in one go, use IGDistanceCounts,
IGDistanceCounts[graph, {vertex}]
This gives you the counts of other vertices found at all (unweighted) distances. You can then simply Accumulate that list to get the result for all r at the same time.
For weighted distances, use IGDistanceHistogram.
$endgroup$
$begingroup$
Thanks. And how to count the same as the 'IGDistanceCounts[graph, {vertex}]' formula but for weighted networks?
$endgroup$
– ralph
8 hours ago
$begingroup$
@ralph As I said above, useIGDistanceHistogram
$endgroup$
– Szabolcs
7 hours ago
add a comment |
$begingroup$
How to count all neighboring nodes within radius 'r' from the node 'g' ?
Use IGraph/M.
IGNeighborhoodSize does precisely this and is probably your fastest bet, but I do not have time to benchmark it against other solutions right now.
If you want to do it for multiple distances in one go, use IGDistanceCounts,
IGDistanceCounts[graph, {vertex}]
This gives you the counts of other vertices found at all (unweighted) distances. You can then simply Accumulate that list to get the result for all r at the same time.
For weighted distances, use IGDistanceHistogram.
$endgroup$
$begingroup$
Thanks. And how to count the same as the 'IGDistanceCounts[graph, {vertex}]' formula but for weighted networks?
$endgroup$
– ralph
8 hours ago
$begingroup$
@ralph As I said above, useIGDistanceHistogram
$endgroup$
– Szabolcs
7 hours ago
add a comment |
$begingroup$
How to count all neighboring nodes within radius 'r' from the node 'g' ?
Use IGraph/M.
IGNeighborhoodSize does precisely this and is probably your fastest bet, but I do not have time to benchmark it against other solutions right now.
If you want to do it for multiple distances in one go, use IGDistanceCounts,
IGDistanceCounts[graph, {vertex}]
This gives you the counts of other vertices found at all (unweighted) distances. You can then simply Accumulate that list to get the result for all r at the same time.
For weighted distances, use IGDistanceHistogram.
$endgroup$
How to count all neighboring nodes within radius 'r' from the node 'g' ?
Use IGraph/M.
IGNeighborhoodSize does precisely this and is probably your fastest bet, but I do not have time to benchmark it against other solutions right now.
If you want to do it for multiple distances in one go, use IGDistanceCounts,
IGDistanceCounts[graph, {vertex}]
This gives you the counts of other vertices found at all (unweighted) distances. You can then simply Accumulate that list to get the result for all r at the same time.
For weighted distances, use IGDistanceHistogram.
answered 9 hours ago
SzabolcsSzabolcs
163k14447944
163k14447944
$begingroup$
Thanks. And how to count the same as the 'IGDistanceCounts[graph, {vertex}]' formula but for weighted networks?
$endgroup$
– ralph
8 hours ago
$begingroup$
@ralph As I said above, useIGDistanceHistogram
$endgroup$
– Szabolcs
7 hours ago
add a comment |
$begingroup$
Thanks. And how to count the same as the 'IGDistanceCounts[graph, {vertex}]' formula but for weighted networks?
$endgroup$
– ralph
8 hours ago
$begingroup$
@ralph As I said above, useIGDistanceHistogram
$endgroup$
– Szabolcs
7 hours ago
$begingroup$
Thanks. And how to count the same as the 'IGDistanceCounts[graph, {vertex}]' formula but for weighted networks?
$endgroup$
– ralph
8 hours ago
$begingroup$
Thanks. And how to count the same as the 'IGDistanceCounts[graph, {vertex}]' formula but for weighted networks?
$endgroup$
– ralph
8 hours ago
$begingroup$
@ralph As I said above, use
IGDistanceHistogram$endgroup$
– Szabolcs
7 hours ago
$begingroup$
@ralph As I said above, use
IGDistanceHistogram$endgroup$
– Szabolcs
7 hours ago
add a comment |
$begingroup$
For weighted network:
g1 = {4798 <-> 2641, 4798 <-> 2310, 4798 <-> 4721, 2310 <-> 1942,2310 <-> 961, 4721 <-> 4507, 4721 <-> 4779, 4779 <-> 4336, 4779 <-> 3238, 4336 <-> 3277, 4336 <-> 3514, 3277 <-> 2923, 2923 <-> 2772, 2923 <-> 2401, 2772 <-> 2, 2772 <-> 2771, 3514 <-> 3042, 3514 <-> 2739, 3042 <-> 3007, 3042 <-> 1655, 2739 <-> 2277, 2739 <-> 1895, 2 <-> 5, 2 <-> 3, 3277 <-> 100, 5 <-> 6, 5 <-> 7, 5 <-> 8, 5 <-> 9};
w1 = {10, 20, 20, 4, 35, 3, 4, 6, 17, 7, 13, 2, 2, 7, 2, 1, 3, 5, 3, 6,4, 6, 2, 1, 1, 1, 1, 1, 1};
w2=Table[1, 29];
net1 = Graph[g1, EdgeWeight -> w1, EdgeLabels -> "EdgeWeight", VertexShapeFunction -> "Name"]
net2 = Graph[g1, EdgeWeight -> w2, EdgeLabels -> "EdgeWeight", VertexShapeFunction -> "Name"]
s = RandomSample[VertexList[net1], 15];
Mr = Table[IGDistanceCounts[net1, {s[[i]]}], {i, 1, Length[s]}] (*for non weighted*)
Mr2 = IGDistanceHistogram[net1, 9] (*for weighted graph ?*)
Mr3 = IGDistanceHistogram[net2, 9] (*for non weighted graph ? Mr3==Mr *)
$endgroup$
add a comment |
$begingroup$
For weighted network:
g1 = {4798 <-> 2641, 4798 <-> 2310, 4798 <-> 4721, 2310 <-> 1942,2310 <-> 961, 4721 <-> 4507, 4721 <-> 4779, 4779 <-> 4336, 4779 <-> 3238, 4336 <-> 3277, 4336 <-> 3514, 3277 <-> 2923, 2923 <-> 2772, 2923 <-> 2401, 2772 <-> 2, 2772 <-> 2771, 3514 <-> 3042, 3514 <-> 2739, 3042 <-> 3007, 3042 <-> 1655, 2739 <-> 2277, 2739 <-> 1895, 2 <-> 5, 2 <-> 3, 3277 <-> 100, 5 <-> 6, 5 <-> 7, 5 <-> 8, 5 <-> 9};
w1 = {10, 20, 20, 4, 35, 3, 4, 6, 17, 7, 13, 2, 2, 7, 2, 1, 3, 5, 3, 6,4, 6, 2, 1, 1, 1, 1, 1, 1};
w2=Table[1, 29];
net1 = Graph[g1, EdgeWeight -> w1, EdgeLabels -> "EdgeWeight", VertexShapeFunction -> "Name"]
net2 = Graph[g1, EdgeWeight -> w2, EdgeLabels -> "EdgeWeight", VertexShapeFunction -> "Name"]
s = RandomSample[VertexList[net1], 15];
Mr = Table[IGDistanceCounts[net1, {s[[i]]}], {i, 1, Length[s]}] (*for non weighted*)
Mr2 = IGDistanceHistogram[net1, 9] (*for weighted graph ?*)
Mr3 = IGDistanceHistogram[net2, 9] (*for non weighted graph ? Mr3==Mr *)
$endgroup$
add a comment |
$begingroup$
For weighted network:
g1 = {4798 <-> 2641, 4798 <-> 2310, 4798 <-> 4721, 2310 <-> 1942,2310 <-> 961, 4721 <-> 4507, 4721 <-> 4779, 4779 <-> 4336, 4779 <-> 3238, 4336 <-> 3277, 4336 <-> 3514, 3277 <-> 2923, 2923 <-> 2772, 2923 <-> 2401, 2772 <-> 2, 2772 <-> 2771, 3514 <-> 3042, 3514 <-> 2739, 3042 <-> 3007, 3042 <-> 1655, 2739 <-> 2277, 2739 <-> 1895, 2 <-> 5, 2 <-> 3, 3277 <-> 100, 5 <-> 6, 5 <-> 7, 5 <-> 8, 5 <-> 9};
w1 = {10, 20, 20, 4, 35, 3, 4, 6, 17, 7, 13, 2, 2, 7, 2, 1, 3, 5, 3, 6,4, 6, 2, 1, 1, 1, 1, 1, 1};
w2=Table[1, 29];
net1 = Graph[g1, EdgeWeight -> w1, EdgeLabels -> "EdgeWeight", VertexShapeFunction -> "Name"]
net2 = Graph[g1, EdgeWeight -> w2, EdgeLabels -> "EdgeWeight", VertexShapeFunction -> "Name"]
s = RandomSample[VertexList[net1], 15];
Mr = Table[IGDistanceCounts[net1, {s[[i]]}], {i, 1, Length[s]}] (*for non weighted*)
Mr2 = IGDistanceHistogram[net1, 9] (*for weighted graph ?*)
Mr3 = IGDistanceHistogram[net2, 9] (*for non weighted graph ? Mr3==Mr *)
$endgroup$
For weighted network:
g1 = {4798 <-> 2641, 4798 <-> 2310, 4798 <-> 4721, 2310 <-> 1942,2310 <-> 961, 4721 <-> 4507, 4721 <-> 4779, 4779 <-> 4336, 4779 <-> 3238, 4336 <-> 3277, 4336 <-> 3514, 3277 <-> 2923, 2923 <-> 2772, 2923 <-> 2401, 2772 <-> 2, 2772 <-> 2771, 3514 <-> 3042, 3514 <-> 2739, 3042 <-> 3007, 3042 <-> 1655, 2739 <-> 2277, 2739 <-> 1895, 2 <-> 5, 2 <-> 3, 3277 <-> 100, 5 <-> 6, 5 <-> 7, 5 <-> 8, 5 <-> 9};
w1 = {10, 20, 20, 4, 35, 3, 4, 6, 17, 7, 13, 2, 2, 7, 2, 1, 3, 5, 3, 6,4, 6, 2, 1, 1, 1, 1, 1, 1};
w2=Table[1, 29];
net1 = Graph[g1, EdgeWeight -> w1, EdgeLabels -> "EdgeWeight", VertexShapeFunction -> "Name"]
net2 = Graph[g1, EdgeWeight -> w2, EdgeLabels -> "EdgeWeight", VertexShapeFunction -> "Name"]
s = RandomSample[VertexList[net1], 15];
Mr = Table[IGDistanceCounts[net1, {s[[i]]}], {i, 1, Length[s]}] (*for non weighted*)
Mr2 = IGDistanceHistogram[net1, 9] (*for weighted graph ?*)
Mr3 = IGDistanceHistogram[net2, 9] (*for non weighted graph ? Mr3==Mr *)
answered 5 hours ago
ralphralph
1707
1707
add a comment |
add a comment |
Thanks for contributing an answer to Mathematica Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f194581%2fneighboring-nodes-in-the-network%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown