Ch04 NumPy Foundations¶
Getting Started wiht NumPy¶
NumPy Array¶
matrix = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
[[i + 1 for i in row] for row in matrix]
[[2, 3, 4], [5, 6, 7], [8, 9, 10]]
# First, let's import NumPy
import numpy as np
# Constructing an array with a simple list results in a 1d array
array1 = np.array([10, 100, 1000.])
# Constructing an array with a nested list results in a 2d array
array2 = np.array([[1., 2., 3.],
[4., 5., 6.]])
array1.dtype
dtype('float64')
float(array1[0])
10.0
Vectorization and Broadcasting¶
array2 + 1
array([[2., 3., 4.],
[5., 6., 7.]])
array2 * array2
array([[ 1., 4., 9.],
[16., 25., 36.]])
array2 * array1
array([[ 10., 200., 3000.],
[ 40., 500., 6000.]])
array2 @ array2.T # array2.T is a shortcut for array2.transpose()
array([[14., 32.],
[32., 77.]])
Universal Functions (ufunc)¶
import math
math.sqrt(array2) # This will raise en Error
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-13-5c37e8f41094> in <module>
----> 1 math.sqrt(array2) # This will raise en Error
TypeError: only size-1 arrays can be converted to Python scalars
np.array([[math.sqrt(i) for i in row] for row in array2])
array([[1. , 1.41421356, 1.73205081],
[2. , 2.23606798, 2.44948974]])
np.sqrt(array2)
array([[1. , 1.41421356, 1.73205081],
[2. , 2.23606798, 2.44948974]])
array2.sum(axis=0) # Returns a 1d array
array([5., 7., 9.])
array2.sum()
21.0
Creating and Manipulation Arrays¶
Getting and Setting Array Elements¶
array1[2] # Returns a scalar
1000.0
array2[0, 0] # Returns a scalar
1.0
array2[:, 1:] # Returns a 2d array
array([[2., 3.],
[5., 6.]])
array2[:, 1] # Returns a 1d array
array([2., 5.])
array2[1, :2] # Returns a 1d array
array([4., 5.])
Useful Array Constructors¶
np.arange(2 * 5).reshape(2, 5) # 2 rows, 5 columns
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
np.random.randn(2, 3) # 2 rows, 3 columns
array([[-0.45471931, -0.41817296, -0.38933941],
[ 2.56475263, 0.62193465, 2.01337361]])
View vs. Copy¶
array2
array([[1., 2., 3.],
[4., 5., 6.]])
subset = array2[:, :2]
subset
array([[1., 2.],
[4., 5.]])
subset[0, 0] = 1000
subset
array([[1000., 2.],
[ 4., 5.]])
array2
array([[1000., 2., 3.],
[ 4., 5., 6.]])