Skip to content
Snippets Groups Projects
Select Git revision
  • e7c3391ce0fa1c2b0dc076250ffe3ba0b72920d6
  • main default protected
2 results

build_docs.py

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    ex0_4_5.py 3.92 KiB
    ## exercise 0.4.5
    import numpy as np
    
    # Setup two ararys
    x = np.arange(1,6)
    y = np.arange(2,12,2)
    # Have a look at them by typing 'x' and 'y' in the console
    
    # There's a difference between matrix multiplication and elementwise 
    # multiplication, and specifically in Python its also important if you 
    # are using the multiply operator "*" on an array object or a matrix object!
    
    # Use the * operator to multiply the two arrays:
    x*y
    
    # Now, convert the arrays into matrices - 
    x = np.asmatrix(np.arange(1,6))
    y = np.asmatrix(np.arange(2,12,2))
    # Again, have a look at them by typing 'x' and 'y' in the console
    
    # Try using the * operator just as before now:
    x*y
    # You should now get an error - try to explain why.
    
    # array and matrix are two data structures added by NumPy package to the list of
    # basic data structures in Python (lists, tuples, sets). We shall use both 
    # array and matrix structures extensively throughout this course, therefore 
    # make sure that you understand differences between them 
    # (multiplication, dimensionality) and that you are able to convert them one 
    # to another (asmatrix(), asarray() functions). 
    # Generally speaking, array objects are used to represent scientific, numerical, 
    # N-dimensional data. matrix objects can be very handy when it comes to 
    # algebraic operations on 2-dimensional matrices.
    
    # The ambiguity can be circumvented by using explicit function calls:
    np.transpose(y)             # transposition/transpose of y
    y.transpose()               # also transpose
    y.T                         # also transpose
    
    np.multiply(x,y)            # element-wise multiplication
    
    np.dot(x,y.T)               # matrix multiplication
    x @ y.T                     # also matrix multiplication
    
    
    # There are various ways to make certain type of matrices.
    a1 = np.array([[1, 2, 3], [4, 5, 6]])   # define explicitly
    a2 = np.arange(1,7).reshape(2,3)        # reshape range of numbers
    a3 = np.zeros([3,3])                    # zeros array
    a4 = np.eye(3)                          # diagonal array
    a5 = np.random.rand(2,3)                # random array
    a6 = a1.copy()                          # copy
    a7 = a1                                 # alias
    m1 = np.matrix('1 2 3; 4 5 6; 7 8 9')   # define matrix by string
    m2 = np.asmatrix(a1.copy())             # copy array into matrix
    m3 = np.mat(np.array([1, 2, 3]))        # map array onto matrix
    a8 = np.asarray(m1)                     # map matrix onto array
      
    # It is easy to extract and/or modify selected items from arrays/matrices. 
    # Here is how you can index matrix elements:
    m = np.matrix('1 2 3; 4 5 6; 7 8 9')
    m[0,0]		# first element
    m[-1,-1]	# last element
    m[0,:]		# first row
    m[:,1]		# second column
    m[1:3,-1]	# view on selected rows&columns
    
    # Similarly, you can selectively assign values to matrix elements or columns:
    m[-1,-1] = 10000
    m[0:2,-1] = np.matrix('100; 1000')
    m[:,0] = 0
    
    # Logical indexing can be used to change or take only elements that 
    # fulfil a certain constraint, e.g.
    m2[m2>0.5]          # display values in m2 that are larger than 0.5
    m2[m2<0.5] = 0      # set all elements that are less than 0.5 to 0 
    
    #Below, several examples of common matrix operations, 
    # most of which we will use in the following weeks.
    # First, define two matrices:
    m1 = 10 * np.mat(np.ones([3,3]))
    m2 = np.mat(np.random.rand(3,3))
    
    m1+m2               # matrix summation
    m1*m2               # matrix product
    np.multiply(m1,m2)  # element-wise multiplication
    m1>m2               # element-wise comparison
    m3 = np.hstack((m1,m2))    # combine/concatenate matrices horizontally 
    # note that this is not equivalent to e.g. 
    #   l = [m1, m2]
    # in which case l is a list, and l[0] is m1
    m4 = np.vstack((m1,m2))    # combine/concatenate matrices vertically 
    m3.shape            # shape of matrix
    m3.mean()           # mean value of all the elements
    m3.mean(axis=0)     # mean values of the columns
    m3.mean(axis=1)     # mean values of the rows
    m3.transpose()      # transpose, also: m3.T
    m2.I                # compute inverse matrix