# 2.2.2. Numerical computing with NumPy¶

NumPy is the most popular numerical computing package for Python. The following examples illustrate the basic functionality of NumPy.

## 2.2.2.1. Array construction¶

import numpy
arr = numpy.array([[1, 2, 3], [4, 5, 6]]) # a 2x3 matrix with elements equal to 1..6
arr = numpy.empty((2, 2)) # a 2x2 matrix with each element equal to a randomly selected number
arr = numpy.zeros((2, 2)) # a 2x2 matrix with each element equal to 0.0
arr = numpy.ones((3, 4)) # a 2x3 matrix with each element equal to 1.0
arr = numpy.full((2, 3), 2.0) # a 2x3 matrix with each element equal to 2.0


## 2.2.2.2. Concatenation¶

arr1 = numpy.array([...])
arr2 = numpy.array([...])
numpy.concatenate(arr1, arr2)


## 2.2.2.3. Query the shape of an array¶

arr = numpy.array([...])
arr.shape()


## 2.2.2.4. Reshaping¶

arr = numpy.array([...])
arr.reshape((n_row, n_col, ...))


## 2.2.2.5. Selection and slicing¶

arr = numpy.array([[1, 2, 3], [4, 5, 6]])
arr[1, 2] # get the value at second row and third column
arr[0, :] # get the first row
arr[:, 0] # get the first column


## 2.2.2.6. Transposition¶

arr = numpy.array([...])
arr_trans = arr.transpose()


## 2.2.2.7. Algebra¶

arr1 = numpy.array([...])
arr2 = numpy.array([...])

arr1 + 2 # element-wise addition
arr1 - 2 # element-wise subtraction
arr1 + arr2 # matrix addition
arr1 - arr2 # matrix subtraction

2. * arr # scalar multiplication
arr1 * arr2 # element-wise multiplication
arr1.dot(arr2) # matrix multiplication

arr ** 2. # element-wise exponentiation


## 2.2.2.8. Trigonometry¶

arr = numpy.array([...])

numpy.sin(arr) # element-wise sine
numpy.cos(arr) # element-wise cosine
numpy.tan(arr) # element-wise tangent
numpy.asin(arr) # element-wise inverse sin
numpy.acos(arr) # element-wise inverse cosign
numpy.atan(arr) # element-wise inverse tangent


## 2.2.2.9. Other mathematical functions¶

numpy.sqrt(arr) # element-wise square root
numpy.ceil() # element-wise ceiling
numpy.floor() # element-wise floor
numpy.round() # element-wise round


## 2.2.2.10. Data reduction¶

arr = numpy.array([...])

arr.all() # determine if all of the values are logically equivalent to True
arr.any() # determine if any of the values are logically equivalent to True
arr.sum() # sum
arr.mean() # mean
arr.std() # standard deviation
arr.var() # variance
arr.min() # minimum
arr.max() # maximum


## 2.2.2.11. Random number generation¶

# set the state of the random number generator to reproducibly generate random values
numpy.random.seed(1)

# select a float, randomly between 0 and 1
numpy.random.rand()

# select a random integer between 0 and 10
numpy.random.randint(10)

# select a random integer according to a Poisson distribution with :math:\lambda = 2
numpy.random.poisson(2.)


## 2.2.2.12. NaN and infinity¶

arr = numpy.array([...])

numpy.nan
numpy.isnan(arr)

numpy.inf
numpy.isinf(arr)
numpy.isfinite(arr)


## 2.2.2.13. Exercises¶

• Concatenate two 3x1 arrays of zeros and ones, and get its shape

• Select the first column of a random 2x3 array

• Transpose a random 2x3 array into a 3x2 array

• Reshape a random 2x3 array into a 3x2 array

• Create a random 2x3 array and round it

• Create a random 100x1 array of Poisson-distributed values with lambda = 10 and calculate its min, max, mean, and standard deviation

• Calculate the element-wise multiplication of two random arrays of size 3x3

• Calculate the matrix multiplication of two random arrays of size 2x3 and 3x4

• Check that infinity is greater than $$10^{10}$$

See intro_to_wc_modeling/concepts_skills/software_engineering/numpy_exercises.py for solutions to these exercises.

## 2.2.2.14. NumPy introduction for MATLAB users¶

The NumPy documentation contains a concise summary of the NumPy analog for each MATLAB function.