In this question, you'll implement the vector dot product.
Write a function which:
dotRecall how a dot product works: corresponding elements of two arrays are multiplied together, then all these products are summed.
For example: if I have two NumPy arrays [1, 2, 3] and [4, 5, 6], their dot product would be (1*4) + (2*5) + (3*6), or 4 + 10 + 18, or 32.
You can use NumPy arrays, and the np.sum() function, but no other NumPy functions.
In [ ]:
    
    
In [ ]:
    
import numpy as np
np.random.seed(57442)
x1 = np.random.random(10)
x2 = np.random.random(10)
np.testing.assert_allclose(x1.dot(x2), dot(x1, x2))
    
In [ ]:
    
np.random.seed(495835)
x1 = np.random.random(100)
x2 = np.random.random(100)
np.testing.assert_allclose(x1.dot(x2), dot(x1, x2))
    
Write a function which:
subarrayThe function should return a NumPy array that corresponds to the elements of the input array of data selected by the indices array.
For example, subarray([1, 2, 3], [2]) should return a NumPy array of [3].
You cannot use any built-in functions, NumPy functions, or loops!
In [ ]:
    
    
In [ ]:
    
import numpy as np
np.random.seed(5381)
x1 = np.random.random(43)
i1 = np.random.randint(0, 43, 10)
a1 = np.array([ 0.24317871,  0.16900041,  0.20687451,  0.38726974,  0.49798077,
        0.32797843,  0.18801287,  0.29021025,  0.65418547,  0.78651195])
np.testing.assert_allclose(a1, subarray(x1, i1), rtol = 1e-5)
    
In [ ]:
    
x2 = np.random.random(74)
i2 = np.random.randint(0, 74, 5)
a2 = np.array([ 0.96372034,  0.84256813,  0.08188566,  0.71852542,  0.92384611])
np.testing.assert_allclose(a2, subarray(x2, i2), rtol = 1e-5)
    
Write a function which:
less_thanYou should use a boolean mask to return only the values in the NumPy array that are less than the specified floating-point value (the second parameter). No loops are allowed, or any built-in functions or loops.
For example, less_than([1, 2, 3], 2.5) should return a NumPy array of [1, 2].
In [ ]:
    
    
In [ ]:
    
import numpy as np
np.random.seed(85928)
x = np.random.random((10, 20, 30))
t = 0.001
y = np.array([ 0.0005339 ,  0.00085714,  0.00091265,  0.00037283])
np.testing.assert_allclose(y, less_than(x, t))
    
In [ ]:
    
np.random.seed(8643)
x2 = np.random.random((100, 100, 10))
t2 = 0.0001
y2 = np.array([  2.91560413e-06,   6.80065620e-06,   3.63294064e-05,
         7.50659065e-05,   1.61602031e-06,   9.37205052e-05])
np.testing.assert_allclose(y2, less_than(x2, t2), rtol = 1e-05)
    
Write a function which:
greater_thanYou should use a boolean mask to return only the values in the NumPy array that are greater than the specified threshold value (the second parameter). No loops are allowed, or built-in functions, or NumPy functions.
For example, greater_than([1, 2, 3], 2.5) should return a NumPy array of [3].
In [ ]:
    
    
In [ ]:
    
import numpy as np
np.random.seed(592582)
x = np.random.random((10, 20, 30))
t = 0.999
y = np.array([ 0.99910167,  0.99982779,  0.99982253,  0.9991043 ])
np.testing.assert_allclose(y, greater_than(x, t))
    
In [ ]:
    
np.random.seed(689388)
x2 = np.random.random((100, 100, 10))
t2 = 0.9999
y2 = np.array([ 0.99997265,  0.99991169,  0.99998906,  0.99999012,  0.99992325,
        0.99993289,  0.99996637,  0.99996416,  0.99992627,  0.99994388,
        0.99993102,  0.99997486,  0.99992968,  0.99997598])
np.testing.assert_allclose(y2, greater_than(x2, t2), rtol = 1e-05)
    
Write a function which:
in_betweenYou should use a boolean mask to return only the values in the NumPy array that are in between the two specified threshold values, lower and upper. No loops are allowed, or built-in functions, or NumPy functions.
For example, in_between([1, 2, 3], 1, 3) should return a NumPy array of [2].
Hint: you can use your functions from Parts C and D to help!
In [ ]:
    
    
In [ ]:
    
import numpy as np
np.random.seed(7472)
x = np.random.random((10, 20, 30))
lo = 0.499
hi = 0.501
y = np.array([ 0.50019884,  0.50039172,  0.500711  ,  0.49983418,  0.49942259,
        0.4994417 ,  0.49979261,  0.50029046,  0.5008376 ,  0.49985266,
        0.50015914,  0.50068227,  0.50060399,  0.49968918,  0.50091042,
        0.50063015,  0.50050032])
np.testing.assert_allclose(y, in_between(x, lo, hi))
    
In [ ]:
    
import numpy as np
np.random.seed(14985)
x = np.random.random((30, 40, 50))
lo = 0.49999
hi = 0.50001
y = np.array([ 0.50000714,  0.49999045])
np.testing.assert_allclose(y, in_between(x, lo, hi))
    
Write a function which:
not_in_betweenYou should use a boolean mask to return only the values in the NumPy array that are NOT in between the two specified threshold values, lower and upper. No loops are allowed, or built-in functions, or NumPy functions.
For example, not_in_between([1, 2, 3, 4], 1, 3) should return a NumPy array of [4].
Hint: you can use your functions from Parts C and D to help!
In [ ]:
    
    
In [ ]:
    
import numpy as np
np.random.seed(475185)
x = np.random.random((10, 20, 30))
lo = 0.001
hi = 0.999
y = np.array([  9.52511605e-04,   8.62993716e-04,   3.70243252e-04,
         9.99945849e-01,   7.21751759e-04,   9.36931041e-04,
         5.10792605e-04,   6.44911672e-04])
np.testing.assert_allclose(y, not_in_between(x, lo, hi))
    
In [ ]:
    
np.random.seed(51954)
x = np.random.random((30, 40, 50))
lo = 0.00001
hi = 0.99999
y = np.array([  8.46159001e-06,   9.99998669e-01,   9.99993873e-01,
         5.58488698e-06,   9.99993348e-01])
np.testing.assert_allclose(y, not_in_between(x, lo, hi))
    
Write a function which:
reverse_arrayThis function uses fancy indexing to reverse the ordering of the elements in the input array, and returns the reversed array. You cannot use the [::-1] notation, nor the built-in reversed method, or any other Python function or loops. You can use the list(), range(), and np.arange() functions, however, and only some or all of those (but again, no loops!).
Hint: Construct a list of indices and use NumPy fancy indexing to reverse the ordering of the elements in the input list, then return the reversed array.
In [ ]:
    
    
In [ ]:
    
import numpy as np
np.random.seed(5748)
x1 = np.random.random(75)
y1 = x1[::-1]  # Sorry, you're not allowed to do this!
np.testing.assert_allclose(y1, reverse_array(x1))
    
In [ ]:
    
np.random.seed(68382)
x2 = np.random.random(581)
y2 = x2[::-1]  # Sorry, you're not allowed to do this!
np.testing.assert_allclose(y2, reverse_array(x2))