# Python: Resize an existing array and fill with zeros

There is a new numpy function in version 1.7.0 `numpy.pad`

that can do this in one-line. Like the other answers, you can construct the diagonal matrix with `np.diag`

before the padding.
The tuple `((0,N),(0,0))`

used in this answer indicates the "side" of the matrix which to pad.

```
import numpy as np
A = np.array([1, 2, 3])
N = A.size
B = np.pad(np.diag(A), ((0,N),(0,0)), mode='constant')
```

`B`

is now equal to:

```
[[1 0 0]
[0 2 0]
[0 0 3]
[0 0 0]
[0 0 0]
[0 0 0]]
```

I think that my issue should be really simple, yet I can not find any help on the Internet whatsoever. I am very new to Python, so it is possible that I am missing something very obvious.

I have an array, S, like this `[x x x] (one-dimensional)`

. I now create a
diagonal matrix, `sigma`

, with `np.diag(S)`

- so far, so good. Now, I want to
resize this new diagonal array so that I can multiply it by another array that
I have.

```
import numpy as np
...
shape = np.shape((6, 6)) #This will be some pre-determined size
sigma = np.diag(S) #diagonalise the matrix - this works
my_sigma = sigma.resize(shape) #Resize the matrix and fill with zeros - returns "None" - why?
```

However, when I print the contents of `my_sigma`

, I get `"None"`

. Can someone please
point me in the right direction, because I can not imagine that this should be
so complicated.

Thanks in advance for any help!

Casper

Graphical:

I have this:

```
[x x x]
```

I want this:

```
[x 0 0]
[0 x 0]
[0 0 x]
[0 0 0]
[0 0 0]
[0 0 0] - or some similar size, but the diagonal elements are important.
```

Another pure python solution is

```
a = [1, 2, 3]
b = []
for i in range(6):
b.append((([0] * i) + a[i:i+1] + ([0] * (len(a) - 1 - i)))[:len(a)])
```

`b`

is now

```
[[1, 0, 0], [0, 2, 0], [0, 0, 3], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
```

it's a hideous solution, I'll admit that.
However, it illustrates some functions of the `list`

type that can be used.