Search code examples
pythonmatrixsympyreshapedimension

How to increase the dimension of a matrix in sympy


Let's say, now I have a 1x1 matrix, like:

M = Matrix([[2]])

How can I create a new 2x2 matrix from this, filling the all blanks with 0s? Which is:

N = Matrix([[2, 0], [0, 0]])

If it were numpy, I could use np.newaxis; however, it seems that there is no newaxis in sympy.

So, I tried:

N = M.reshape(2, 2)

I got the following error:

ValueError: Invalid reshape parameters 2 2

I found that the following expression works:

N = Matrix(2, 2, [D[0], 0, 0, 0])

However, this is a bit awkward. Is there any better way?

Please note that a scalar multiplication N = D[0] * Matrix(2, 2, [1, 0, 0, 0]) is not acceptable, since next time I may ask you to convert 2x2 to 3x3.


Solution

  • Use sympy.diag.

    >>> import sympy as sp
    >>> m = sp.Matrix([[2]])
    >>> sp.diag(m, 0)
    Matrix([
    [2, 0],
    [0, 0]])
    >>> sp.diag(m, 0, 0)
    Matrix([
    [2, 0, 0],
    [0, 0, 0],
    [0, 0, 0]])
    >>> sp.diag(sp.Matrix([[1, 2], [3, 4]]), 0)
    Matrix([
    [1, 2, 0],
    [3, 4, 0],
    [0, 0, 0]])