Numpy is a fundamental package for scientific computing in Python. It contains:
import numpy as np
np.array(range(5))
array([0, 1, 2, 3, 4])
np.zeros(5)
array([ 0., 0., 0., 0., 0.])
np.ones([5,2])
array([[ 1., 1.], [ 1., 1.], [ 1., 1.], [ 1., 1.], [ 1., 1.]])
arr = np.ndarray((3,4,5,5));
arr.ndim, arr.dtype
(4, dtype('float64'))
numbers = np.ones(300, dtype='int32')
numbers
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], dtype=int32)
arr = numbers.reshape(3,4,5,5)
arr.shape
(3, 4, 5, 5)
arr[0][0]
array([[1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1]], dtype=int32)
arr[0][0][0] = range(5)
arr[0][0]
array([[0, 1, 2, 3, 4], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1]], dtype=int32)
arr[0][0] = [range(5)] * 5
arr[0][0]
array([[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]], dtype=int32)
numpy notation to slice
arr[0,0,:,:]
array([[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]], dtype=int32)
arr[0,0,:,2:4]
array([[2, 3], [2, 3], [2, 3], [2, 3], [2, 3]], dtype=int32)
arr[0,0:2,:,2:4]
array([[[2, 3], [2, 3], [2, 3], [2, 3], [2, 3]], [[1, 1], [1, 1], [1, 1], [1, 1], [1, 1]]], dtype=int32)
3 dots represents as many column as needed to complete an indexing tuple
arr[0,0,...]
array([[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]], dtype=int32)
arr[0,...,0]
array([[ 0, 5, 10, 15, 20], [ 5, 5, 5, 5, 5], [ 5, 5, 5, 5, 5], [ 5, 5, 5, 5, 5]], dtype=int32)
arr[0,0,:,:] += np.transpose(arr[0,0,:,:])
arr[0,0,...]
array([[0, 1, 2, 3, 4], [1, 2, 3, 4, 5], [2, 3, 4, 5, 6], [3, 4, 5, 6, 7], [4, 5, 6, 7, 8]], dtype=int32)
arr *= 5
arr[0,0,...]
array([[ 0, 5, 10, 15, 20], [ 5, 10, 15, 20, 25], [10, 15, 20, 25, 30], [15, 20, 25, 30, 35], [20, 25, 30, 35, 40]], dtype=int32)
a = np.arange(5)
a, a.shape
(array([0, 1, 2, 3, 4]), (5,))
a = np.vstack([a, np.arange(5)])
a
array([[0, 1, 2, 3, 4], [0, 1, 2, 3, 4]])
a = np.vstack([a,(7,8,9,10,11)])
a
array([[ 0, 1, 2, 3, 4], [ 0, 1, 2, 3, 4], [ 7, 8, 9, 10, 11]])
a.shape
(3, 5)