Ask Your Question

How can I get Sage to go over all possible maps between two sets?

asked 2015-05-03 00:25:28 +0200

phoenix gravatar image

updated 2015-05-03 00:36:27 +0200

What I want to do is this : Say I take a graph $K_{n,n}$ and choose an ordering for each edge arbitrarily - say denote each edge as $(i,j)$ where $i$ is in the left partition and $j$ is in the right partition. I have a set of matrices $A = { A_1, A_2,...,A_k }$. I want to iterate over all possible ways in which one could have assigned an A matrix to an edge of this graph.

  • How does one do that? (..apart from writing a massive sequence of nested loops!..)
edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted

answered 2015-05-03 11:54:48 +0200

Nathann gravatar image

To list all functions from A to B you must iterate on all points of B^|A|. This can be achieved with itertools' 'product' function:

def all_functions(A,B):
    from itertools import product
    B_to_the_A = product(B,repeat=len(A))
    for p in B_to_the_A:
        yield dict(zip(A,p))

sage: for f in all_functions("abc",[0,1]):
....:     print f
{'a': 0, 'c': 0, 'b': 0}
{'a': 0, 'c': 1, 'b': 0}
{'a': 0, 'c': 0, 'b': 1}
{'a': 0, 'c': 1, 'b': 1}
{'a': 1, 'c': 0, 'b': 0}
{'a': 1, 'c': 1, 'b': 0}
{'a': 1, 'c': 0, 'b': 1}
{'a': 1, 'c': 1, 'b': 1}


edit flag offensive delete link more


Is that "repeat" a command?

phoenix gravatar imagephoenix ( 2015-05-08 03:36:43 +0200 )edit

Why is this slightly modified thing not working? def All_Maps(A,B): from itertools import product k = len (A) return product(B,repeat = k)

for f in All_Maps ([a,b],[0,1]): print f

phoenix gravatar imagephoenix ( 2015-05-08 03:39:01 +0200 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower


Asked: 2015-05-03 00:25:28 +0200

Seen: 284 times

Last updated: May 03 '15