MCPcopy
hub / github.com/dmlc/dgl / negative_sample

Function negative_sample

python/dgl/data/adapter.py:207–224  ·  view source on GitHub ↗

Random sample negative edges from graph, excluding self-loops, the result samples might be less than num_samples

(g, num_samples)

Source from the content-addressed store, hash-verified

205
206
207def negative_sample(g, num_samples):
208 """Random sample negative edges from graph, excluding self-loops,
209 the result samples might be less than num_samples
210 """
211 num_nodes = g.num_nodes()
212 redundancy = _calc_redundancy(num_samples, g.num_edges(), num_nodes**2)
213 sample_size = int(num_samples * (1 + redundancy))
214 edges = np.random.randint(0, num_nodes, size=(2, sample_size))
215 edges = np.unique(edges, axis=1)
216 # remove self loop
217 mask_self_loop = edges[0] == edges[1]
218 # remove existing edges
219 has_edges = F.asnumpy(g.has_edges_between(edges[0], edges[1]))
220 mask = ~(np.logical_or(mask_self_loop, has_edges))
221 edges = edges[:, mask]
222 if edges.shape[1] >= num_samples:
223 edges = edges[:, :num_samples]
224 return edges
225
226
227class AsLinkPredDataset(DGLDataset):

Callers 1

processMethod · 0.85

Calls 5

_calc_redundancyFunction · 0.85
asnumpyMethod · 0.80
num_nodesMethod · 0.45
num_edgesMethod · 0.45
has_edges_betweenMethod · 0.45

Tested by

no test coverage detected