2.3. Array Shape¶
2.3.1. Recap¶
>>> obj = [1, 2, 3]
>>>
>>> len(obj)
3
>>> obj1 = [1, 2, 3]
>>> obj2 = [4, 5, 6]
>>>
>>> len([obj1, obj2])
2
>>> len([ [1,2,3], [4,5,6] ])
2
>>> len([[1,2,3],
... [4,5,6]])
2
>>> obj1 = [1, 2, 3]
>>> obj2 = [4, 5, 6]
>>> obj3 = [7, 8, 9]
>>> obj4 = [10, 11, 12]
>>>
>>> len([ [obj1, obj2], [obj3, obj4] ])
2
>>> len([[obj1, obj2],
... [obj3, obj4]])
2
2.3.2. Rationale¶
Any shape operation changes only
np.ndarray.shape
andnp.ndarray.strides
and does not touch data
2.3.3. Shape¶
import numpy as np
a = np.array([1, 2, 3])
a.shape
# (3,)
import numpy as np
a = np.array([[1, 2, 3],
[4, 5, 6]])
a.shape
# (2, 3)
import numpy as np
a = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
a.shape
# (3, 3)
import numpy as np
a = np.array([[[ 1, 2, 3],
[ 4, 5, 6],
[ 5, 6, 7]],
[[11, 22, 33],
[44, 55, 66],
[77, 88, 99]]])
a.shape
# (2, 3, 3)
2.3.4. Reshape¶
Returns new array
Does not modify inplace
a.reshape(1, 2)
is equivalent toa.reshape((1, 2))
import numpy as np
a = np.array([1, 2, 3])
a.reshape(1, 3)
# array([[1, 2, 3]])
a.reshape(3, 1)
# array([[1],
# [2],
# [3]])
import numpy as np
a = np.array([[1, 2, 3],
[4, 5, 6]])
a.reshape(3, 2)
# array([[1, 2],
# [3, 4],
# [5, 6]])
a.reshape(1, 6)
# array([[1, 2, 3, 4, 5, 6]])
a.reshape(6, 1)
# array([[1],
# [2],
# [3],
# [4],
# [5],
# [6]])
a.reshape(5, 2)
# Traceback (most recent call last):
# ValueError: cannot reshape array of size 6 into shape (5,2)
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6, 7, 8])
a.reshape(2, 4)
# array([[1, 2, 3, 4],
# [5, 6, 7, 8]])
a.reshape(2, 4, 1)
# array([[[1],
# [2],
# [3],
# [4]],
# [[5],
# [6],
# [7],
# [8]]])
a.reshape(2, 2, 2)
# array([[[1, 2],
# [3, 4]],
# [[5, 6],
# [7, 8]]])
a.reshape(1, 2, 4)
# array([[[1, 2, 3, 4],
# [5, 6, 7, 8]]])
a.reshape(4, 2, 1)
#array([[[1],
# [2]],
# [[3],
# [4]],
# [[5],
# [6]],
# [[7],
# [8]]])
a.reshape(1, 8, 1)
# array([[[1],
# [2],
# [3],
# [4],
# [5],
# [6],
# [7],
# [8]]])
a.reshape(2, 3, 1)
# Traceback (most recent call last):
# ValueError: cannot reshape array of size 8 into shape (2,3,1)
2.3.5. Flatten¶
Returns new array (makes memory copy - expensive)
Does not modify inplace
import numpy as np
a = np.array([1, 2, 3])
a.flatten()
# array([1, 2, 3])
import numpy as np
a = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
a.flatten()
# array([1, 2, 3, 4, 5, 6, 7, 8, 9])
import numpy as np
a = np.array([[[ 1, 2, 3],
[ 4, 5, 6],
[ 5, 6, 7]],
[[11, 22, 33],
[44, 55, 66],
[77, 88, 99]]])
a.flatten()
# array([ 1, 2, 3, 4, 5, 6, 5, 6, 7, 11, 22, 33, 44, 55, 66, 77, 88, 99])
2.3.6. Ravel¶
Ravel is the same as Flatten but returns a reference (or view) of the array if possible (i.e. memory is contiguous)
Otherwise returns new array (makes memory copy)
import numpy as np
a = np.array([1, 2, 3])
a.ravel()
# array([1, 2, 3])
import numpy as np
a = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
a.ravel()
# array([1, 2, 3, 4, 5, 6, 7, 8, 9])
import numpy as np
a = np.array([[[ 1, 2, 3],
[ 4, 5, 6],
[ 5, 6, 7]],
[[11, 22, 33],
[44, 55, 66],
[77, 88, 99]]])
a.ravel()
# array([ 1, 2, 3, 4, 5, 6, 5, 6, 7, 11, 22, 33, 44, 55, 66, 77, 88, 99])
2.3.7. Assignments¶
"""
* Assignment: Numpy Shape 1d
* Complexity: easy
* Lines of code: 2 lines
* Time: 3 min
English:
1. Use data from "Given" section (see below)
2. Define `result_ravel` with result of flattening `DATA` using `.ravel()` method
2. Define `result_flatten` with result of flattening `DATA` using `.flatten()` method
3. Define `result_reshape` with result of reshaping `DATA` into 1x9
Polish:
1. Użyj danych z sekcji "Given" (patrz poniżej)
2. Zdefiniuj `result_ravel` z wynikiem spłaszczenia `DATA` używając metody `.ravel()`
2. Zdefiniuj `result_flatten` z wynikiem spłaszczenia `DATA` używając metody `.flatten()`
3. Zdefiniuj `result_reshape` z wynikiem zmiany kształtu `DATA` na 1x9
Tests:
>>> type(result_ravel) is np.ndarray
True
>>> type(result_flatten) is np.ndarray
True
>>> type(result_reshape) is np.ndarray
True
>>> result_flatten
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> result_ravel
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> result_reshape
array([[1, 2, 3, 4, 5, 6, 7, 8, 9]])
"""
# Given
import numpy as np
DATA = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
result_ravel = ...
result_flatten = ...
result_reshape = ...