I don't understand the following timings:

sage: A = AlternatingSignMatrices(6)
sage: lC = [a.corner_sum_matrix() for a in A]
sage: timeit("[from_corner_sum_1(corner) for corner in lC]", number=1, 
repeat=1)
1 loops, best of 1: 63 s per loop
sage: timeit("[from_corner_sum_2(corner) for corner in lC]", number=1, 
repeat=1)
1 loops, best of 1: 23.3 s per loop

The first implementation, from_corner_sum_1, computes each entry of the 
result matrix using just array access to four elements in the given matrix 
"corner".
The second, from_corner_sum_2, computes the same, using a caching version 
of a naive algorithm.  (I was unaware of the first relation when I coded 
it.) 

Why is the second version so much faster?  This looks insane to me!  I hope 
I have misunderstood something very basic!

Martin

def from_corner_sum_1(corner):
    n = len(list(corner))-1
    asm = [[corner[i+1][j+1]+corner[i][j]-corner[i][j+1]-corner[i+1][j]
            for j in range(n)]
           for i in range(n)]
    return AlternatingSignMatrix(asm)

def from_corner_sum2(corner):
    asm_list = []
    n = len(list(corner)) - 1
    for k in range(n):
        asm_list.append([])
    S = [0]*n
    C = [0]*n
    for i in range(n):
        R = 0
        for j in range(n):
            y = corner[i+1][j+1] - S[j] - C[j] - R
            S[j] += R
            C[j] += y
            R += y
            asm_list[i].append(y)
    return AlternatingSignMatrix(asm_list)

-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To post to this group, send email to sage-devel@googlegroups.com.
Visit this group at https://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to