I have a (large) number of nodes and (triangular) cells, e.g.,cells_nodes = [    [0, 3, 1],    [0, 2, 3]    ]This example represents the small mesh(Please call me Picasso from here on out.)Now, I would like to create the edges for these meshes (in red above), specifically edgenode and edgecell relations. For the above example, the result would be[[0], [1], [1], [0, 1], [0]]  # edge -> cells[[1, 3], [2, 3], [0, 2], [0, 3], [0, 1]]  # edge -> nodes[[0, 3, 4], [1, 2, 3]]  # cell -> edgesThe problem I wasn't able to solve to my satisfaction is to identify the individual edges. Note that [1, 2] is the same edge as [2, 1]. Using frozensets works, but is perhaps overkill. This codeimport numpydef create_edges(cells_nodes):    from collections import defaultdict    d = defaultdict(list)    # Loop over lists all pairs of nodes, i.e., all possible edges.    cells_edges = []    for local_edges in [[0, 1], [1, 2], [2, 0]]:        # Put those into a list of frozensets so [21, 54] == [54, 21].        cells_edges.append(                map(frozenset, cells_nodes[:, local_edges])                )        # Store the edges in a dictionary, store the corresponding cell too.        for k, f in enumerate(cells_edges[-1]):            d[f].append(k)    edges_nodes = numpy.array(map(list, d))    edges_cells = list(d.values())    edge_indices = dict(zip(d.keys(), range(len(d))))    cells_edges = numpy.vstack(        [[edge_indices[edge] for edge in c] for c in cells_edges]        ).T    return edges_nodes, edges_cells, cells_edgesif __name__ == '__main__':    import meshzoo    vertices, cells = meshzoo.rectangle.create_mesh(            0.0, 1.0,            0.0, 1.0,            2, 2            )    edges_nodes, edges_cells, cells_edges = create_edges(cells)    print(vertices)    print    print(cells)    print    print(edges_nodes)    print    print(edges_cells)    print    print(cells_edges)works, but it too slow. The applications of map, and likely the explicit loops are killing the performance.$ python -m cProfile -o program.prog e.py$ snakeviz program.progAny idea of how improve this?
Create edges from cells
python;performance;python 2.7;graph