Message Boards Message Boards

0
|
955 Views
|
2 Replies
|
0 Total Likes
View groups...
Share
Share this post:

Modifying Edge Weights in Nearest Neighbor Graph with Custom Distance Function

Dear community,

I am working on a project where I have generated a nearest neighbor graph (nnG). Here is a simplified version of the code:

data = {{7.3, -4.9, 0.2}, {7.5, -3.5, 0.1}, {4.1, -2.8, 0.3}, {0.2, 7.3, 0.1}, {7.2, -4.4, 0.3}, {-0.0, 3.5, 0.4}, {-3.2, -1.6, 0.2}, {-2.0, 4.7, 0.2}, {-7.3, 0.0, 0.3}, {-6.4, 1.6, 0.3}, {-0.4, 3.1, 0.2}, {-4.3, 0.7, 0.5}};

distanceF[u_, v_] := Sqrt[(u[[1]] - v[[1]])^2 + (u[[2]] - v[[2]])^2] + 2 k1/(k2 + (u[[3]] + v[[3]]));

k1 = 0.1;
k2 = 0.001;

nnG = NearestNeighborGraph[data[[All, 1 ;; 2]], 5, DirectedEdges -> False, DistanceFunction -> EuclideanDistance]

Now, I would like to modify the edge weights of the graph based on the distances computed by the custom distance function distanceF, using the 3 columns of the original data, instead of only the first 2 ones. How can I achieve this in Mathematica?

The idea is to keep the nnG previously computed, while only changing the edge weights.

Any guidance would be greatly appreciated.

Thank you!

2 Replies
Posted 6 months ago

The provided code does not evaluate successfully. I get

Part::partw: Part 3 of {7.3,-4.9} does not exist.

POSTED BY: Rohit Namjoshi

Sorry, there was a mistake in the previous version of the code. The original network is calculated using euclidean distances, while the function distanceF is the one used to update the original weights.

Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
Attachments
Remove
or Discard

Group Abstract Group Abstract