# Resize: Compensation for bad planning?
{:.no_toc}

<nav markdown="1" class="toc-class">
* TOC
{:toc}
</nav>

## Top

Questions to [David Rotermund](mailto:davrot@uni-bremen.de)

**Try to avoid using this function!** Do better planning. 


Resize does its work on the linear memory segment.
* If it is resized to a bigger array, the beginning of the original memory segment is copied into the new end segment.
* If it is resized to a smaller array, the memory segment is shrunken by cutting of the end.

## [numpy.resize](https://numpy.org/doc/stable/reference/generated/numpy.resize.html)

```python
numpy.resize(a, new_shape)
```

> Return a new array with the specified shape.
> 
> If the new array is larger than the original array, then the new array is filled with repeated copies of a. Note that this behavior is different from a.resize(new_shape) which fills with zeros instead of repeated copies of a.

```python
import numpy as np

a = np.arange(1, 10).reshape((3, 3))
print(a)
print()
b = np.resize(a, (2, 3))
print(b)
print()
b = np.resize(a, (3, 1))
print(b)
print()
b = np.resize(a, (5, 5))
print(b)
```

Output:

```python
[[1 2 3]
 [4 5 6]
 [7 8 9]]

[[1 2 3]
 [4 5 6]]

[[1]
 [2]
 [3]]

[[1 2 3 4 5]
 [6 7 8 9 1]
 [2 3 4 5 6]
 [7 8 9 1 2]
 [3 4 5 6 7]]
```

## This is not [numpy.ndarray.resize](https://numpy.org/doc/stable/reference/generated/numpy.ndarray.resize.html#numpy.ndarray.resize)

```python
ndarray.resize(new_shape, refcheck=True)
```

> Change shape and size of array in-place.

I added a copy because it does not work on views (*ValueError: cannot resize this array: it does not own its data*) , which reshape creates. 

```python
import numpy as np

a = np.arange(1, 10).reshape((3, 3)).copy()
print(a)
print()
a.resize((5, 5))
print(a)
```

Output:

```python
[[1 2 3]
 [4 5 6]
 [7 8 9]]

[[1 2 3 4 5]
 [6 7 8 9 0]
 [0 0 0 0 0]
 [0 0 0 0 0]
 [0 0 0 0 0]]
```

## More bad function

**Try to avoid using these functions​!** 

### [numpy.delete](https://numpy.org/doc/stable/reference/generated/numpy.delete.html)

```python
numpy.delete(arr, obj, axis=None)
```

> Return a new array with sub-arrays along an axis deleted. For a one dimensional array, this returns those entries not returned by arr[obj].

### [numpy.insert](https://numpy.org/doc/stable/reference/generated/numpy.insert.html)

```python
numpy.insert(arr, obj, values, axis=None)
```

> Insert values along the given axis before the given indices.

### [numpy.append](https://numpy.org/doc/stable/reference/generated/numpy.append.html)

```python
numpy.append(arr, values, axis=None)
```

> Append values to the end of an array.