pytutorial/numpy/resize/README.md

133 lines
2.6 KiB
Markdown
Raw Normal View History

# 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.