Ask Your Question

Revision history [back]

There is no such mechanism out of the box. For lists, you can use list comprehension:

sage: [M[i] + N[i] for i in xrange(len(M))]

For matrices, you can also make one by yourself as follows:

def elementwise(operator, M, N):
    assert(M.parent() == N.parent())
    nc, nr = M.ncols(), M.nrows()
    A = copy(M.parent().zero_element())
    for r in xrange(nr):
        for c in xrange(nc):
            A[r,c] = operator(M[r,c], N[r,c])
    return A

and then use it as follows:

sage: elementwise(operator.add, M, N)
sage: elementwise(operator.pow, M, N)
sage: elementwise(operator.mul, M, N)
sage: elementwise(operator.div, M, N)

and so on.

There is no such mechanism out of the box. For lists, you can use list comprehension:comprehension or the map function:

sage: [M[i] + N[i] for i in xrange(len(M))]
sage: map(operator.add, N, M)

For matrices, there is no such mechanism out of the box, but you can also make one by yourself as follows:

def elementwise(operator, M, N):
    assert(M.parent() == N.parent())
    nc, nr = M.ncols(), M.nrows()
    A = copy(M.parent().zero_element())
    for r in xrange(nr):
        for c in xrange(nc):
            A[r,c] = operator(M[r,c], N[r,c])
    return A

and then use it as follows:

sage: elementwise(operator.add, M, N)
sage: elementwise(operator.pow, M, N)
sage: elementwise(operator.mul, M, N)
sage: elementwise(operator.div, M, N)

and so on.