# python – What does -1 mean in numpy reshape?

## python – What does -1 mean in numpy reshape?

The criterion to satisfy for providing the new shape is that *The new shape should be compatible with the original shape*

numpy allow us to give one of new shape parameter as -1 (eg: (2,-1) or (-1,3) but not (-1, -1)). It simply means that it is an unknown dimension and we want numpy to figure it out. And numpy will figure this by looking at the *length of the array and remaining dimensions* and making sure it satisfies the above mentioned criteria

Now see the example.

```
z = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
z.shape
(3, 4)
```

Now trying to reshape with (-1) . Result new shape is (12,) and is compatible with original shape (3,4)

```
z.reshape(-1)
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
```

Now trying to reshape with (-1, 1) . We have provided column as 1 but rows as unknown . So we get result new shape as (12, 1).again compatible with original shape(3,4)

```
z.reshape(-1,1)
array([[ 1],
[ 2],
[ 3],
[ 4],
[ 5],
[ 6],
[ 7],
[ 8],
[ 9],
[10],
[11],
[12]])
```

The above is consistent with `numpy`

advice/error message, to use `reshape(-1,1)`

for a single feature; i.e. single column

Reshape your data using

`array.reshape(-1, 1)`

if your data has asingle feature

New shape as (-1, 2). row unknown, column 2. we get result new shape as (6, 2)

```
z.reshape(-1, 2)
array([[ 1, 2],
[ 3, 4],
[ 5, 6],
[ 7, 8],
[ 9, 10],
[11, 12]])
```

Now trying to keep column as unknown. New shape as (1,-1). i.e, row is 1, column unknown. we get result new shape as (1, 12)

```
z.reshape(1,-1)
array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]])
```

The above is consistent with `numpy`

advice/error message, to use `reshape(1,-1)`

for a single sample; i.e. single row

Reshape your data using

`array.reshape(1, -1)`

if it contains asingle sample

New shape (2, -1). Row 2, column unknown. we get result new shape as (2,6)

```
z.reshape(2, -1)
array([[ 1, 2, 3, 4, 5, 6],
[ 7, 8, 9, 10, 11, 12]])
```

New shape as (3, -1). Row 3, column unknown. we get result new shape as (3,4)

```
z.reshape(3, -1)
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
```

And finally, if we try to provide both dimension as unknown i.e new shape as (-1,-1). It will throw an error

```
z.reshape(-1, -1)
ValueError: can only specify one unknown dimension
```

Used to reshape an array.

Say we have a 3 dimensional array of dimensions 2 x 10 x 10:

```
r = numpy.random.rand(2, 10, 10)
```

Now we want to reshape to 5 X 5 x 8:

```
numpy.reshape(r, shape=(5, 5, 8))
```

will do the job.

Note that, once you fix first `dim = 5`

and second `dim = 5`

, you dont need to determine third dimension. To assist your laziness, Numpy gives the option of using `-1`

:

```
numpy.reshape(r, shape=(5, 5, -1))
```

will give you an array of `shape = (5, 5, 8)`

.

Likewise,

```
numpy.reshape(r, shape=(50, -1))
```

will give you an array of shape = (50, 4)

You can read more at http://anie.me/numpy-reshape-transpose-theano-dimshuffle/

#### python – What does -1 mean in numpy reshape?

According to `the documentation`

:

newshape : int or tuple of ints

The new shape should be compatible with the original shape. If an

integer, then the result will be a 1-D array of that length. One shape

dimension can be-1. In this case, the value is inferred from the

length of the array and remaining dimensions.