def compute_and_save_long_range_nh(uvIds, min_range, max_sample_size=0):
import random
import itertools
originalGraph = agraph.Graph(uvIds.max()+1)
originalGraph.insertEdges(uvIds)
uv_long_range = numpy.array(list(itertools.combinations(numpy.arange(originalGraph.numberOfVertices), 2)), dtype=numpy.uint64)
lm_short = agraph.liftedMcModel(originalGraph)
agraph.addLongRangeNH(lm_short, min_range)
uvs_short = lm_short.liftedGraph().uvIds()
# Remove uvs_short from uv_long_range
# -----------------------------------
# Concatenate both lists
concatenated = numpy.concatenate((uvs_short, uv_long_range), axis=0)
# Find unique rows according to
# http://stackoverflow.com/questions/16970982/find-unique-rows-in-numpy-array
b = numpy.ascontiguousarray(concatenated).view(numpy.dtype((numpy.void, concatenated.dtype.itemsize * concatenated.shape[1])))
uniques, idx, counts = numpy.unique(b, return_index=True, return_counts=True)
# Extract those that have count == 1
# TODO this is not tested
long_range_idx = idx[counts == 1]
uv_long_range = concatenated[long_range_idx]
# Extract random sample
if max_sample_size:
sample_size = min(max_sample_size, uv_long_range.shape[0])
uv_long_range = numpy.array(random.sample(uv_long_range, sample_size))
return uv_long_range
lifted_mc.py 文件源码
python
阅读 21
收藏 0
点赞 0
评论 0
评论列表
文章目录