pytutorial/numpy/resize
David Rotermund 4ca3ced758
Update README.md
Signed-off-by: David Rotermund <54365609+davrot@users.noreply.github.com>
2023-12-30 18:43:36 +01:00
..
README.md Update README.md 2023-12-30 18:43:36 +01:00

Resize: Compensation for bad planning?

{:.no_toc}

* TOC {:toc}

Top

Questions to David Rotermund

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

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.

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:

[[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

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.

import numpy as np

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

Output:

[[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]]