In [1]:
import numpy as np

1. Write a function to generate square arrays of size $n \times n$ that increment by one in layers. For example, for n=11, we have

array([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1],
       [1, 2, 3, 3, 3, 3, 3, 3, 3, 2, 1],
       [1, 2, 3, 4, 4, 4, 4, 4, 3, 2, 1],
       [1, 2, 3, 4, 5, 5, 5, 4, 3, 2, 1],
       [1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1],
       [1, 2, 3, 4, 5, 5, 5, 4, 3, 2, 1],
       [1, 2, 3, 4, 4, 4, 4, 4, 3, 2, 1],
       [1, 2, 3, 3, 3, 3, 3, 3, 3, 2, 1],
       [1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])

Generate a $13 \times 13$ square.


In [ ]:

2. Generate the following array starting from np.arange(1, 25)

array([[ 1,  5,  9, 13, 17, 21],
       [ 2,  6, 10, 14, 18, 22],
       [ 3,  7, 11, 15, 19, 23],
       [ 4,  8, 12, 16, 20, 24]])
  • Find the row sums
  • Find the column sums
  • Normalize so that each row sums to 1
  • Replace all numbers in the matrix with the number modulo 12 (e.g. 9 is unchange but 13 becomes 1)
  • Extract the 2 by 4 inner sub-block tha starts with 6 and ends with 19

In [ ]:

3. Create the $12 \times 12$ multiplicaiton table below using the vector np.arange(1, 13) and broadcasting.

array([[  1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12],
       [  2,   4,   6,   8,  10,  12,  14,  16,  18,  20,  22,  24],
       [  3,   6,   9,  12,  15,  18,  21,  24,  27,  30,  33,  36],
       [  4,   8,  12,  16,  20,  24,  28,  32,  36,  40,  44,  48],
       [  5,  10,  15,  20,  25,  30,  35,  40,  45,  50,  55,  60],
       [  6,  12,  18,  24,  30,  36,  42,  48,  54,  60,  66,  72],
       [  7,  14,  21,  28,  35,  42,  49,  56,  63,  70,  77,  84],
       [  8,  16,  24,  32,  40,  48,  56,  64,  72,  80,  88,  96],
       [  9,  18,  27,  36,  45,  54,  63,  72,  81,  90,  99, 108],
       [ 10,  20,  30,  40,  50,  60,  70,  80,  90, 100, 110, 120],
       [ 11,  22,  33,  44,  55,  66,  77,  88,  99, 110, 121, 132],
       [ 12,  24,  36,  48,  60,  72,  84,  96, 108, 120, 132, 144]])

In [ ]:

4. Calculate the pairwise distance matrix between the column vectors of the following array (use Euclidean distance). This should be a $6 \times 6$ array. Try to calculate the distance matrix using different approaches (e.g. loops, broadcasting, scipy funcitons).

array([[ 1,  5,  9, 13, 17, 21],
       [ 2,  6, 10, 14, 18, 22],
       [ 3,  7, 11, 15, 19, 23],
       [ 4,  8, 12, 16, 20, 24]])

Plot the resulting distance matrix as a "heatmap" using matlplotlib.


In [ ]: