Hi Alasdair!

On 24 Okt., 20:01, Alasdair <amc...@gmail.com> wrote:
> Actually, just worked it out:
>
> matrix(ZZ,2,2,map(int,M.list()))


Do you want to convert your matrix into a matrix of Integers (=
elements of Sage's ZZ) or into a matrix of Python integers (type int)?
Since Python integers don't form a parent structure, there are no
Python-int matrices in Sage, if I am not mistaken.

This is why you get the error
    TypeError: base_ring (=<type 'int'>) must be a ring
when you try map_threaded(int,M)

So, from now on, I assume that you want a transformation into Integer
(not int) matrices.

> So I need to convert the matrix to a list, apply map to that list, and
> then convert the result back to a matrix.  But why can't I do this
> with a single map command?

Your original base ring is G.<x>=GF(2^8). There is no homomorphism
from GF(2^8) to ZZ (at least if you want that 1 is mapped to 1...).

So, why *should* there be a single command to transform a matrix over
GF(2^8) into the "corresponding" matrix over ZZ? The point is, there
is no "corresponding" matrix in that case!

Note that a transformation is easy, as long as it mathematically makes
sense:

sage: MZ = random_matrix(ZZ,6,6)
sage: MQ1 = map_threaded(QQ,MZ)
sage: MQ2 = MZ*QQ(1)
sage: MZ = random_matrix(ZZ,6,6)
sage: MGF3a = map_threaded(GF(3),MZ)
sage: MGF3b = MZ*GF(3)(1)
sage: MGF3a == MGF3b
True
sage: MGF3a.parent() == MGF3b.parent()
True

If I am not mistaken, the problems you encountered are all about
coercion, which is described at 
http://www.sagemath.org/doc/reference/coercion.html

One more remark. It is still not clear to me what exactly you mean by
a transformation from G to ZZ. But perhaps you know the log_to_int
method of G? This expresses an element of G (which is a polynomial in
x) into a Python int. So, no surprize about this error:
  sage: map_threaded(G.log_to_int,M)
  Traceback
  ...
  TypeError: base_ring (=<type 'int'>) must be a ring

However, going one step further, you can proceed to "proper" Sage
integers. For example:
  sage: f = lambda x: ZZ(G.log_to_int(x))
  sage: map_threaded(f,M)

  [  7 138]
  [212 169]

Best regards,
Simon

--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to 
sage-support-unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sage-support
URL: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to