def transform_npz_nx(g, penalize=20): from numpy import int32 ids = g['ids'] lat = g['lat'] long = g['long'] id2edges = g['id2edges'] edges_weight = g['edges_weight'] edges_neighbor = g['edges_neighbor'] edges_air = g['edges_type'] rescale = edges_weight.dtype == int32 from networkx import Graph h = Graph() index2node = {} for index in range(len(ids)): node = (int(ids[index]), lat[index] / (10000000. if rescale else 1), long[index] / (10000000. if rescale else 1)) index2node[index] = node h.add_node(node) for index in range(len(ids)): left = id2edges[index] right = id2edges[index + 1] me = index2node[index] for i in range(left, right): neighbor = edges_neighbor[i] air = edges_air[i] w = edges_weight[i] / ( (1000. * (penalize if air < 0 else 1)) if rescale else 1) h.add_edge(me, index2node[neighbor], weight=w, type=air) return h