# Unflatten a vector

I have a vector say a $9 \times 1$ vector which looks like $$\begin{bmatrix} 2x +1 \newline x \newline 1 \newline x \newline x^2 + 2x \newline 2x \newline x \newline 2x^2 \newline 0 \newline \end{bmatrix}$$ with entries in $\mathbb{F}_3[x]$.

There are 9 rows in this matrix and i want to write a function which takes an $n^2 \times 1$ matrix and turns it into a $n \times n$ matrix. So, in this case, we want the function would turn the above vector into

$$\begin{bmatrix} 2x+1 & x & 1 \newline x & x^2+2x & 2x \newline x & 2x^2 & 0 \newline \end{bmatrix}$$

In this Sage, I tried this:

sage: v = Matrix(GF(3)[x], [[2*x+1],[x],[1],[x],[x^2+2*x],[2*x],[x],[2*x^2],[0]])


Then, write the following:

sage: Matrix(v.base_ring(), 3, 3, v)


This gave an error:

inconsistent number of rows: should be 3 but got 1

edit retag close merge delete

Sort by » oldest newest most voted

Another option: if v is a matrix of any shape with $3^2$ entries, then v.list() will list those entries. So then you can do matrix(3, 3, v.list()) to turn v into a 3 by 3 matrix.

more

and take the transpose then. that works.

( 2019-04-12 04:54:01 -0500 )edit

You can do the following if v is a $3^2 \times 1$ matrix (as in your example):

Matrix([vector(v[3*k:3*k+3,0].transpose()) for k in range(3)])


Or more easily, if v is a vector with $3^2$ components:

v = vector(GF(3)[x], [2*x+1,x,1,x,x^2+2*x,2*x,x,2*x^2,0])
Matrix([v[3*k:3*k+3] for k in range(3)])

more